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 }