mongoDB的安装与使用

介绍

mongodb是一种非关系型的数据库,它采用的BSON()的语法,轻便,简单,高效。
BSON是一种类JSON的对象,以二进制的形式存储,在存储的时候采用{“name”:“jack”,“age”:20}键值对的形式。

安装

1.安装下载的.msi文件 ,注意安装在纯英文的路径上,各种next,就完成了安装。
2.配置环境变量,将mongodb的安装路径的bin目录添加到系统环境变量path中。(不配置环境变量就要在mongodb的安装路径的bin文件夹下打开cmd)
3.手动建立数据仓库,注意是纯英文路径
4.打开cmd面板,执行mongod --dbpath "c:/data/db" --storageEngine=mmapvq
5.重新打开一个cmd命令窗口,执行mongo(4步骤打开的cmd不能关闭)

再次运行:
1.打开cmd执行mongod
2.再打开一个cmd命令窗口运行mongo;

 再次运行的时候出现错误的解决方法:(执行其中的一个,情况一样执行不一样)
1.mongo --repear
2.mongo --dbpath "c:/data"
3.mongo --auth --dbpath c:\mongo\mongoDB\mongo\data --repear
4.删除仓库根目录中的mongod.lock文件

库的操作

查看所有库:show dbs
创建并进入库: use ku-name
删除库: db.dropDatabase()  //要先进入要删除的库再删除。

集合的操作

注: 要先进入collection 再操作
查看集合帮助: db.collection.help()
查看集合: show collections
集合重命名: db.collection.renameCollection()
查看集合空间大小: db.collection.dataSize()
查看集合总数据量: bd.collection.count()
查看集合所在数据库:db.collection.getDB();
删除集合:db.collection.drop()
集合复制:db.collection.copyTo('copy-name')

数据操作(增删改查)

注:先进入collection再操作

增加数据

db.collection.insert({"name":"jack","age":18})
{"name":"jack","age":18}:要增加的数据

删除数据

db.collection.remove({"name":"jack"})
{"name":"jack"}:要删除数据的条件

修改数据

db.collection.update({"name":"jack"},{"age":20},{upsert:true},{multi:true})
{"name":"jack"}:更新的条件
{"age":20}: 要更新的内容
{upsert:true}:如果不存在该数据,是否选择插入该数据。
{multi:true} : 匹配多个 false时只匹配查找到的第一个
上面方法的弊端: 会用要更新的内容替换更新条件所在的数据。

$inc : 增加数字类型值的value
    db.collection.update({name:"jack"},{$inc:{age:10}})  
    // jack所在数据的age增加10
$set: 设置key的value
    db.collection.update({name:"jack"},{$set:{name:"lisi"}}) 
    //将jack所在数据的name改为lisi,元数据中没有的key,可增加key:value
$unset : 删除属性
    db.collection.update({name:"jack"},{$unset:{age: 18}},{multi:true})  
    //将所有jack所在数据的age属性删除
$push: 往 数组中添加一个值
    db.collection.update({name:"jack"},{$push:{hobby:"lanqiu"}}) 
    //往hobby的value(数组)中添加lanqiu。
$pushAll:往数组中添加多个值
    db.collection.update({name:"jack"},{$pushAll:{hobby:[lanqiu,zuqiu]}}) 
    //往hobby的value(数组)中添加lanqiu、zuqiu
$addToSet:增加一个值到数组内,只有当这个值不在数组内才增加
    db.collection.update({name:"jack"},{$addToSet:{hobby:{$each:[lanqiu,zuqiu]}}})
$pop:删除数组内的一个值
    db.collection.update({name:"jack"},{$pop:{hobby:1}}) //从hobby数组的末尾删除
    db.collection.update({name:"jack"},{$pop:{hobby:-1}}) //从hobby数组的开头删除
$pull:从数组内删除一个等于value的值
    db.collection.update({name:"jack"},{$pull:{hobby:"lanqiu"}})
    //删除jack数据hobby属性值中的lanqiu
$pullAll:从数组删除多个值
    db.collection.update({name:"jack"},{$pullAll:{hobby:['lanqiu','zuqiu']}})
    //删除jack数据hobby属性值中的lanqiu、zuqiu

查询数据

db.collection.find()
    //查找集合内所有的数据
db.collection.find({'age':18})
    //查找集合内所有age为18的数据
db.collection.find({"age":{$gt:18}})
    //查找集合内所有age大于18的数据
db.collection.find({"age":{$lt:18}})
    //查找集合内所有age小于18的数据
db.collection.find({"age":{$gte:18}})
    //查找集合内所有age大于等于18的数据
db.collection.find({"age":{$lte:18}})
    //查找集合内所有age小于等于18的数据
db.collection.find({"age":{$gt:18,$lte:30}})
    //查找集合内所有age大于18小于30的数据
db.collection.find({"age":{$ne:30}})
    //查找集合内所有age不等于30的数据
db.collection.find({'age':{$mod:[10,1]}})
    //取模运算,查找集合内所有age%10 =1 的数据
db.collection.find({"age":{$nin:[1,2,3]}})
    //查找集合内所有age不属于[1,2,3]中的任何一个
db.collection.find({"age":{$in:[1,2,3]}})
    //查找集合内所有age属于[1,2,3]中的任何一个
db.collection.find({"hobby":{$size:1}})
    //查找集合内所有hobby的值为1个的数据
db.collection.find({"age":{$exists:true|false}})
    //true 存在字段age,返回有age的数据,
    //false 不存在字段age,返回没有age的数据
db.collection.find({"key":/^val.*val$/i})
    //查找集合内key的值符合正则表达式的数据
db.collection.find({$or:[{a:1},{b:2}]})
    //查找集合内符合a=1或b=2的数据
db.collection.find("age":18,$or:[{a:1},{b:2}])
    //查找集合内age=18,并且a=1或b=2的数据
db.collection.find({"key":{$not:/^val.*val$/i}})
    //查找集合内key的值不符合正则表达式的数据
    $not: 以上查找,如果加上$not就会获得相反的结果
db.collection.find().sort({"key1":-1,"key2":1})
    //将集合内的所有数据排序,1为升序,-1为降序
db.collection.find().limit(10),skip(10)
    //分页  limit查询多少条  skip从第几条开始查

索引

索引的目的是为了提高查询的效率,但是索引也不是越多越好,有两面性。索引会影响插入数据的效率

创建索引:(1代表升序  -1代表降序)
db.collection.ensureIndex({"name":1,"des":-1})

设置为唯一索引:
db.collection.ensureIndex({"name":1},{unique:true})

删除所有索引:
db.collection.dropIndexes()

删除指定的索引:
db.collection.dropIndex({"name":1})

聚合

$sum:求和
    db.collection.aggregate([{$group:{_id:"$字段",sumKey:{$sum:1}}}])
    //$sum:1  相当于单位

$avg:平均值
    db.collection.aggregate([{$group:{_id:"$sex",avg:{$avg:"$age"}}}])

$min:获取集合中所有文档对应值的最小值
    db.collection.aggregate([{$group:{_id:"$sex",min:{$min:"$age"}}}])

$max:获取集合中所有文档对应值的最大值
    db.collection.aggregate([{$group:{_id:"$sex",max:{$max:"$age"}}}])

数据备份

数据备份: mongodump -d dbname -o c:/data
    dbname: 要备份的数据库的名称
    c:/data:备份的数据库要放的地址
数据恢复:mongorestore -d dbname c:data/test
    dbname:恢复数据库新建的名称
    c:data/test:要恢复数据库的地址
posted @ 2017-07-05 12:24  rainbow8590  阅读(119)  评论(0编辑  收藏  举报