您的位置:首页 > 数据库 > Mongodb

超越之MongDB系列教程(五) Mongodb的修改器

2016-06-24 09:58 519 查看
注意:修改器都是放到对象的外层,查询器都是放到内层

1.$set修改器操作(存在就修改,不存在就增加)

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc", "age" : 32 }

> db.user.update({name:"jc"},{$set:{age:33}})

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc", "age" : 33 }

2.$inc修改器操作(对数进行加减操作,可以作为主键自增功能)

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc", "age" : 33 }

> db.user.update({age:33},{$inc:{age:1}})

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc", "age" : 34 }

3.$unset修改器操作(删除指定的键)

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc", "age" : 34 }

> db.user.update({age:34},{$unset:{age:1}})

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc"}

4.$push修改器操作(可以向字段中追加集合)

> db.user.insert({_id:4,name:"jcc",books:[]}) # 插入一个集合books

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc"}

{ "_id" : 4, "name" : "jcc", "books" : [ ]}

> db.user.update({_id:4},{$push:{books:"java-book"}}) #存在时追加值

> db.user.update({_id:4},{$push:{books:"c#-book"}}) #存在时追加值

> db.user.update({_id:4},{$push:{child:"baby"}}) #不存在时新增键值

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc"}

{ "_id" : 4, "name" : "jcc", "books" : [ "java-book","c#-book" ] ,"child" : [ "baby" ]}

5.$pushAll修改器操作(将数组添加进去)

db.user.update({_id:4},{$pushAll:{classes:["01","02","03"]}}) #直接插入一个数组classes

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc"}

{ "_id" : 4, "name" : "jcc", "books" : [ "java-book","c#-book" ] ,"child" : [ "baby" ] ,"classes" : [ "1", "2", "3" ] }

6.$addToSet修改器操作(数组中存在时不操作,不存在时增加)

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc"}

{ "_id" : 4, "name" : "jcc", "books" : [ "c#-book" ] ,"child" : [ "baby" ] ,"classes" : [ "1", "2", "3" ] }

> db.user.update({_id:4},{$addToSet:{books:{"java-book"}}}) #books追加一个值为java-book

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc"}

{ "_id" : 4, "name" : "jcc", "books" : [ "java-book","c#-book" ] ,"child" : [ "baby" ] ,"classes" : [ "1", "2", "3" ] }

7.$pop 从指定数组删除一个值(-1为删除第一个值,1为删除第二个值)

> db.user.find()

{ "_id" : 1, "age" : 30 }

{ "_id" : 2, "name" : "cc" }

{ "_id" : 3, "name" : "jc"}

{ "_id" : 4, "name" : "jcc", "books" : [ "java-book","c#-book" ] ,"child" : [ "baby" ] ,"classes" : [ "1", "2", "3" ] }

> db.user.update({_id:4},{$pop:{books:-1}}) #删除java-book

8.$pull 删除一个被指定的数值(注意:这里不能批量的删除,只能逐个删除)

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "name" : "cyjch", "books" : [ "java", "c#" ] }

> db.user.update({_id:5},{$pull:{books:["java","c#"]}}) ##这里试图一下删除两个,结果无效

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "name" : "cyjch", "books" : [ "java", "c#" ] }

> db.user.update({_id:5},{$pull:{books:"java"}}) #删除其中一个元素值

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ "c#" ], "name" : "cyjch" }

9.$pullAll 一次性删除多个指定的数值(注意:这里是批量删除)

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ "c#" ], "name" : "cyjch" }

> db.user.update({_id:5},{$addToSet:{books:"java"}}) #给books插入一个值

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ "c#", "java" ], "name" : "cyjch" }

> db.user.update({_id:5},{$pullAll:{books:["java","c#"]}}) #同时删除两个元素值

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ ], "name" : "cyjch" }

10.$ (例子有错)

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ "java" ], "name" : "cyjch" }

{ "_id" : 6, "books" : { "author" : "jichao", "name" : "java-book" } }

{ "_id" : 7, "books" : [ { "author" : "jichao", "name" : "java-b

ook" }, { "author" : "jichao", "name" : "c#-book" } ] }

> db.user.update({"books.name":"java-book"},{$set:{"books.$.price":120}})

11.$addToSet与$each结合完成批量数组更新

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ "js" ], "name" : "cyjch" }

> db.user.update({_id:5},{$addToSet:{books:{$each:["js","db"]}}}) #更新books数组,不存在的都加上

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ "js", "db" ], "name" : "cyjch" }

12.runCommand函数和findAndModify函数,用于返回update或remove后的文档结果

findAndModify只能一次修改一个文档

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 3, "name" : "cc" }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ "js", "db", "jsp" ], "name" : "cyjch" }

> ps = db.runCommand({

"findAndModify":"user", #这里是查找的对象名称

"query":{"name":"jc"}, #这里是查找的条件

"update":{"$set":{age:32}}, #这里是修改的值

"new":true
#返回更新前的文档还是更新后的文档,默认为更新前的

})

> db.user.find();

{ "_id" : 1, "age" : 30 }

{ "_id" : 2 }

{ "_id" : 4, "name" : "jc", "age" : 30 }

{ "_id" : 5, "books" : [ "js", "db", "jsp" ], "name" : "cyjch" }

{ "_id" : 3, "age" : 32, "name" : "jc" }

> ps.value

{ "_id" : 3, "age" : 32, "name" : "jc" }

================================================

原文:http://blog.csdn.net/cyjch/article/details/51750198

作者:超越

超越的主页:http://blog.csdn.net/cyjch

================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: