MongoDB总结
基本操作
show databases;
use databasename;
db.dropDatabase();
show collections;
db.createCollection('collectionname');
db.collectionname.drop();
|
CURD
增:
集合存在则直接插入数据,不存在则隐式创建
collections为集合名
db.collection.insert({name:"jack"}) db.collection.insert([{name:"jack"}.{name:"tom"}]) for(var i =0;i<5;i++){ db.collection.insert({name:"jack"}) }
|
改:
db.collection.update(条件,新数据[,是否新增,是否修改多条数据]) //是否新增:true则为插入,默认flase为不插入 //是否修改多条:匹配到的数据都修改,默认true为是,false为否 db.collection.update({name:"tom"},{name:"saily"},false,true) //这样子为将tom的那条数据替换成{name:"saily"},默认为替换不是修改
|
下面运算符可在新数据里面使用
运算符 |
作用 |
$inc |
递增 |
$rename |
重命名列 |
$set |
修改列值 |
$unset |
删除列 |
//$inc使用,将age增加3 db.collection.update({name:"tom"},{$inc:{age: 3}}) //$inc使用,将age减少3 db.collection.update({name:"tom"},{$inc:{age: -3}})
|
//$rename使用,修改name命名为uname db.collection.update({name:"tom"},{$rename:{name:"uname"}})
|
//$set使用,将修改name为saily db.collection.update({name:"tom"},{$set:{name:"saily"}})
|
//$unset使用,将age字段删除,true为删除 db.collection.update({name:"tom"},{$unset:{age:true}})
|
db.collection.update({name:"tom"},{ $inc:{age: 3}, $set:{name:"saily"}, $rename:{name:"uname"}, $unset:{age:true} })
|
查:
db.collection.find(条件[,查询的列])
db.collection.find().pretty();
db.collection.find({age:6})
db.collection.find({age:6,sex:"male"})
db.collection.find({name:"tom"},{age:1})
db.collection.find({name:"tom"},{age:0})
|
删:
db.collection.remove(条件[,是否删除一条])
db.collection.remove({})
|
排序:
db.collectionname.find().sort(JSON数据)
db.test.find().sort({age: -1});
|
Limit与Skip方法:
db.collectionname.find().sort().skip(数字).limit(数字);
db.test.find().sort({age:-1}).limit(2);
db.test.find().sort({age:-1}).skip(2).limit(2);
|
聚合查询:
db.collectionname.aggregate([ {管道:{表达式}} ... ])
|
常用管道
方法 |
作用 |
$group |
将集合中的文档分组,用于统计结果 |
$match |
过滤数据,只要输出符合条件的文档 |
$sort |
聚合数据进一步排序 |
$skip |
跳过指定的文档数 |
$limit |
限制集合数据返回文档数 |
… |
… |
常用表达式
方法 |
作用 |
用法 |
$sum |
总和 |
$sum:1 同count表示统计 |
$avg |
平均 |
|
$min |
最小值 |
|
$max |
最大值 |
|
… |
… |
… |
//统计sex的总人数 db.test.aggregate([ { $group:{ _id: "$sex", //按照sex列的顺序分组 rs: {$sum:1} //rs为统计总和的结果 } } ])
|
db.test.aggregate([ {$group:{ _id: null, totalNum: {$sum: 1}, avgAge: {$avg: "$age"} }} ])
|
db.test.aggregate([ { $group:{ _id: "$sex", totalNum: {$sum:1}, } }, { $sort:{totalNum:1} } ])
|
索引:
db.collectionname.createIndex(待创建索引的列[,额外选项])
db.collectionname.dropIndexes()
db.collectionname.dropIndex('索引名')
db.collectionname.getIndexes()
|
db.collectionname.createIndex({name:1,age:1})
db.collectionname.createIndex({name:1},{unique:age})
|
分析索引:
db.collectionname.find().explain('executionStats');
//COLLSCAN 全表扫描 //IXSCAN 索引扫描 //FETCH 根据索引去检索指定的document
|
db.test.find({name:"tom"}).explain('executionStats');
db.test.find({name:"tom"}).explain('executionStats');
|
权限机制:
use admin; db.createUser({ "user": "huangjiahui", "pwd": "huangjiahui", roles:[{ role: "readWrite", db: "huangjiahui" }] });
db.createUser({ "user": "账号", "pwd": "密码", roles:[{ role: "角色", db: "所属数据库" },{ role: "readWrite", db: "zdnfcj" }, ] })
|
#角色种类
超级用户角色:root
数据库用户角色:read、readWrite
数据库管理角色:dbAdmin、userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色:backup、restore
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
通过root登录
- mongo ip:port/database -u user -p pwd
- 先登录 mongo,选择admin数据库,db.auth(user,pwd)
备份还原:
备份
mongodump -h -port -u -p -d -o
//语法说明 -h host ip -port port -u user -p pwd -d database -o open ./xxx/ 备份路径文件夹
|
还原
mongorestore -h -port -u -p -d --drop 备份数据目录
-d 不写则还原全部数据 --drop 先删除数据库再导入
|