mongodb 常用命令
mongodb与mysql比较:
mongodb:数据库>集合>文档
mysql:数据库>表>记录
mongodb可以存储的数据类型:
1、null {'one':null}
2、布尔类型 {'one':true}
3、32位整数
4、64位整数
5、64位浮点数{'one':2.02}{'one':10}
6、字符串
7、符号
8、ObjectId类型
9、日期
10、正则表达
11、代码
12、数组
13、内嵌文档
查看
查看数据库:
show dbs
> show dbs local 0.000GB
查看当前数据库:
db
> db test
当前数据库有多少个集合:
show tables;
show collections;
> show tables; > show collections;
插入
插入数据:
db.c1.insert({name:'xiaoming'});
> db.c1.insert({name:'xiaoming'}); WriteResult({ "nInserted" : 1 }) > show dbs local 0.000GB test 0.000GB > show tables; c1
save({}); save也为插入数据,不同的是当id相同时save则更改改id的值
批量插入数据:
for(var i = 1;i <= 10;i++){
db.c1.insert({name:'xiaoming'+i});
}
语法为js。
> for(var i = 1;i <= 10;i++){ ... db.c1.insert({name:'xiaoming'+i}); ... } WriteResult({ "nInserted" : 1 }) > db.c1.find(); { "_id" : ObjectId("57a9dc25b65f14b912d3cd7f"), "name" : "xiaoming1" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd80"), "name" : "xiaoming2" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd81"), "name" : "xiaoming3" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd82"), "name" : "xiaoming4" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd83"), "name" : "xiaoming5" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd84"), "name" : "xiaoming6" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd85"), "name" : "xiaoming7" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd86"), "name" : "xiaoming8" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd87"), "name" : "xiaoming9" } { "_id" : ObjectId("57a9dc25b65f14b912d3cd88"), "name" : "xiaoming10" }
删除
删除集合:
db.c1.remove({});
括号{}要带上
db.c1.remove({条件});
> db.c1.remove({}); WriteResult({ "nRemoved" : 2 })
查询
查询数据:
db.c1.find();
db.c1.find({条件});
> db.c1.find(); { "_id" : ObjectId("57a7269d791b7abc802fdc13"), "name" : "xiaoming" } { "_id" : ObjectId("57a726dc791b7abc802fdc14"), "sex" : "man" } > db.c1.find({name:'xiaoming1'}); { "_id" : ObjectId("57a9dc25b65f14b912d3cd7f"), "name" : "xiaoming1" }
只要某个字段:
db.c1.find({name:'xiaohuang'},{name:1});
填写第二个参数,只想要的字段设置为1
{ "_id" : ObjectId("57a9dee3b65f14b912d3cd89"), "name" : "xiaohuang", "sex" : "man", "age" : 19 } > db.c1.find({name:'xiaohuang'},{name:1}); { "_id" : ObjectId("57a9dee3b65f14b912d3cd89"), "name" : "xiaohuang" }
查询的结果中不要id:
db.c1.find({name:'xiaohuang'},{_id:0});
在第二个参数中填写 _id:0 即可
> db.c1.find({name:'xiaohuang'},{_id:0,name:1}); { "name" : "xiaohuang" }
模糊查询:
db.c1.find({age:{$gt:5}});
$gt:5 表示大于5的集合
$lt 小于
$gte 大于等于
$lte 小于等于
$ne 不等于
> db.c1.find({age:{$gt:5}}); { "_id" : ObjectId("57a9e2deb65f14b912d3cda3"), "name" : "user6", "age" : 6 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda4"), "name" : "user7", "age" : 7 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda5"), "name" : "user8", "age" : 8 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda6"), "name" : "user9", "age" : 9 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda7"), "name" : "user10", "age" : 10 }
修改
方法一:
db.c1.update({name:'xiaoming'},{name:'laowang'});
db.c1.update(原值,新值);
这样改会把原值也给改掉。
> db.c1.find(); { "_id" : ObjectId("57a88aeb776b323c5bf47cb4"), "name" : "xiaoming", "age" : 18, "sex" : "man" } > db.c1.update({name:'xiaoming'},{name:'xiaohuang'}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.c1.find(); { "_id" : ObjectId("57a88aeb776b323c5bf47cb4"), "name" : "xiaohuang" }
方法二:
db.c1.update({name:'xiaoming'},{$set:{name:'laowang'}});
不仅可以改值还可以添加新的值
db.c1.update(匹配到的值,一些操作);
db.c1.update({name:'xiaoli'},{$set:{name:'cueihua'}}); db.c1.update({name:'xiaoli'},{$set:{weight:120}});
排序
对集合排序:
db.c1.find().sort({age:-1}); 倒序
db.c1.find().sort({age:1}); 正序
> db.c1.find().sort({age:-1}); { "_id" : ObjectId("57a9e2deb65f14b912d3cda7"), "name" : "user10", "age" : 10 } . . { "_id" : ObjectId("57a9e2deb65f14b912d3cd9e"), "name" : "user1", "age" : 1 } > db.c1.find().sort({age:1}); { "_id" : ObjectId("57a9e2deb65f14b912d3cd9e"), "name" : "user1", "age" : 1 } . . { "_id" : ObjectId("57a9e2deb65f14b912d3cda7"), "name" : "user10", "age" : 10 }
其他
统计集合个数:
db.c1.count();
> db.c1.count(); 10
limit限制列表个数:
db.c1.find().limit(2); 2为获取的个数
> db.c1.find().limit(2); { "_id" : ObjectId("57a9e2deb65f14b912d3cd9e"), "name" : "user1", "age" : 1 } { "_id" : ObjectId("57a9e2deb65f14b912d3cd9f"), "name" : "user2", "age" : 2 }
跳过指定个数获取:
db.c1.find().skip(3).limit(2); 相当于mysql中的limit(3,2);
> db.c1.find().skip(3).limit(2); { "_id" : ObjectId("57a9e2deb65f14b912d3cda1"), "name" : "user4", "age" : 4 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda2"), "name" : "user5", "age" : 5 }
db.c1.find().sort({age:-1}).skip(2).limit(2).count();
这条语句先自行sort即使是放在后面,count()默认不看前面的条件,填入1即count(1)前面的条件才管用。
> db.c1.find().sort({age:-1}).skip(2).limit(2).count(0); 10 > db.c1.find().sort({age:-1}).skip(2).limit(2).count(1); 2
$all 包含
db.c2.find({post:{$all:[7,8]}}); 找出数组中包含[7,8]的元素
> db.c2.insert({name:'xiaoming',post:[1,2,3,4,5,6]}); WriteResult({ "nInserted" : 1 }) > db.c2.find({post:{$all:[1,2]}}); { "_id" : ObjectId("57a9eb4eb65f14b912d3cda8"), "name" : "xiaoming", "post" : [ 1, 2, 3, 4, 5, 6 ] } > db.c2.find({post:{$all:[7,8]}});
$exists 包含或存在
db.c2.find({name:{$exists:1}}); 有没有包含name的
> db.c2.find({name:{$exists:1}}); { "_id" : ObjectId("57a9eb4eb65f14b912d3cda8"), "name" : "xiaoming", "post" : [ 1, 2, 3, 4, 5, 6 ] }
$mod 取余
db.c1.find({age:{$mod:[2,1]}}); 对2取余为1的集合
> db.c1.find({age:{$mod:[2,1]}}); { "_id" : ObjectId("57a9e2deb65f14b912d3cd9e"), "name" : "user1", "age" : 1 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda0"), "name" : "user3", "age" : 3 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda2"), "name" : "user5", "age" : 5 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda4"), "name" : "user7", "age" : 7 } { "_id" : ObjectId("57a9e2deb65f14b912d3cda6"), "name" : "user9", "age" : 9 }