目的
本文介绍MongoDB的基本操作,包括文档的创建、删除、和更新。
文档插入
1、插入
1  | #查看当前都有哪些数据库  | 
2、查询
1  | #通过find()方法进行查询  | 
3、如何快速构造1万条文档呢?
可以通过json的循环来实现
1  | > for(i=2;i<=20;i++){  | 
总结:
插入一条文档使用insert方法
文档的规则是键值对,他们是成对出现的他们之间用逗号分隔,键和值通过冒号分隔。
删除文档
1、查询所有
1  | #db.user.find() 如果括号内不加任何条件那么默认是显示所有的文档  | 
2、查询条件
1  | > db.user.find({"uid":1}) #这里指定条件  | 
3、删除文档
1  | > db.user.remove({"uid":1})  | 
4、清空集合
1  | > db.user.remove({})  | 
5、删除集合
1  | > db.user.drop()  | 
更新文档
先把之前删除掉饿文档创建一下:
1  | for(i=2;i<=20;i++){ db.user.insert({"uid":i,"name":"luotianshuai"+i,"salary":2000+Math.round(Math.random())*5000}) }  | 
1、更新文档
更新文档这里通过update方法括号内,第一个文档为查询的文档,第二个文档为修改为什么文档!
1  | > db.user.update({"uid":2},{"name":"shuaige"})  | 
通过查看这种更新方式,后面的文档会覆盖我们要修改文档的整个内容,就变成下面的内容了。uid字段salary字段都被覆盖掉了
1  | > db.user.find()  | 
所以用下面的方法可以
1  | > db.user.update({"uid":3},{"uid" : 3, "name" : "shuaige", "salary" : 2000 })  | 
可以看到这个更新结果是我们想要的结果,这种方式叫做文档的替换方式更新!
但是我们uid不需要变更,salary也不需要变更但是我们都要写出来!
2、变量替换方式
我们可以把取出来的值赋值给一个变量,然后通过变量去修改!
1  | #把查询到的值赋值给a  | 
他的本质还是替换的方式,只不过是方便了
3、使用修改器$inc更新
如何对uid为10的用户增加100块钱工资
1  | #这里$inc遵循键值对的规则,他相当于键,要修改的内容为值  | 
4、添加一个字段$set修改器
有时候有需求要给某个文档添加一个字段,比如年龄。使用$set
1  | #添加器$set  | 
5、删除一个字段$unset修改器
有时候有需求要求给某个文档删除一个字段,比如年龄。使用$unset
1  | #这里注意使用unset的时候他的值也是一个字典要删除的字段:1 这个1,是true的意思删除它,所以这个1是逻辑的true  | 
看上面使用$unset的时候age的值为1说明为true那我们也可以通过值为true来删除它,那么我们来删除uid为10的salary字段
1  | #例子  | 
6、更新文档的其他参数
1  | > db.user.update({arg1},{arg2},arg3,arg4)  | 
总结:
第3个和第4个参数默认为false
第一个为查找的条件,第二个为修改内容,第三个是是否在查不到的时候添加修改内容,第四个是是否匹配所有。
更新文档中的文档和更新文档中的数组
用Python理解的话就是字典中的字典和,字典中的列表~~!
先创建一个文档,然后通过修改他来实际看下如何修改文档中的文档和文档中的数组
1  | > db.user.insert({"uid":1,"name":"luotianshuai","content":{"addr":"beijing","code":10085,"qq":"1234567"},"email":[]})  | 
一、数组的更新
1、数组增加元素$push
1  | > db.user.update({"uid":1},{"$push":{"email":"a"}})  | 
$push 是在元组中增加一个元素,会在数组的最后追加元素
2、$pushAll 在元组中增加多个元素,但是他不检查元素是否存在
如下:b已经存在了,我再同时增加b,c,d看下是什么结果
1  | > db.user.update({"uid":1},{"$push":{"email":"b"}})  | 
$pushAll
1  | > db.user.update({"uid":1},{"$pushAll":{"email":["b","c","d"]}})  | 
3、$addToSet 往数组中添加一个不重复的元素
1  | > db.user.update({"uid":1},{"$addToSet":{"email":"d"}})  | 
添加一个元素
1  | #如果不存在就创建  | 
添加多个不重复的元素,这时候就得需要用到$eache操作符了
1  | #这里e,d都是存在的然后g,f是不存在的批量插入看下结果  | 
总结:
db.user.update({“uid”:1},{“$push”:{“email”:”a”}}) #在数组末尾添加一个元素
db.user.update({“uid”:1},{“$pushAll”:{“email”:[“b”,”c”,”d”]}}) #在数组末尾添加多个元素,且并不检查是否重复
db.user.update({“uid”:1},{“$addToSet”:{“email”:”d”}}) #向数组添加一个不重复的元素
#在实际的生产中可能需要插入多个不重复的元素可以使用$addToSet 结合$eache操作符
db.user.update({“uid”:1},{“$addToSet”:{“email”:{“$each”:[“e”,”g”,”f”,”d”]}}})
二、删除数组元素
1、$pop 从数组中1个值,只能从开头和结尾取值
$pop是从数组中的开头和结尾删除一个值

从上面的结果可以看出,$pop操作符的值中数组的值,为正数的时候从数组的右侧删值,为负数的时候从数组的左侧取值
2、$pull删除指定的数组指定的一个元素

3、$pullAll 删除多个指定的数组元素

总结:
db.user.update({“uid”:1},{“$pop”:{“email”:-1}}) #从左侧删除一个元素
db.user.update({“uid”:1},{“$pop”:{“email”:1}})#从右侧删除一个元素
db.user.update({“uid”:1},{“$pull”:{“email”:”b”}}) #删除数组内的指定一个元素
db.user.update({“uid”:1},{“$pullAll”:{“email”:[“b”,”c”]}}) #删除数组内指定的多个元素
三、数组元素的更新
1、通过变量调用下标修改
1  | > db.user.findOne()  | 
2、通过数组.下标修改
1  | > db.user.findOne()  | 
上面的emil.0 相当于emil[0] 通过下标调用mongodb能识别它!
四、文档的文档修改
看下面的例子说明,文档的文档可以通过“.”分法一级一级的嵌套下去修改他如下
1、查询
1  | > b = db.user.findOne()  | 
2、修改
1  | > b.content.code = 123456789  | 

