超越之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
================================================
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
================================================
相关文章推荐
- 超越之MongDB系列教程(四) Mongodb的基本操作(含插入与删除)
- 别让你的mongodb宕机了
- 8天学通MongoDB——第八天 驱动实践
- 8天学通MongoDB——第七天 运维技术
- 8天学通MongoDB——第六天 分片技术
- 8天学通MongoDB——第五天 主从复制
- 8天学通MongoDB——第四天 索引操作
- 8天学通MongoDB——第三天 细说高级操作
- 8天学通MongoDB——第二天 细说增删查改
- 8天学通MongoDB——第一天 基础入门
- mongodb sharding config数据库集合介绍
- mongodb sharding Tag控制数据分片
- mongodb子文档查询
- mongodb与mysql相比的优缺点
- mongodb 安装(windows mongodb 安装)
- MongoDB创建表步骤,Mongo常用的数据库操作命令,查询,添加,更新,删除_MongoDB 性能监测
- windows 安装MongoDB(64位)
- MongoDB的Master-Slave主从模式配置及主从复制要点解析
- Mongodb高级进阶 MapReduce
- 详解清除MongoDB所占用的多余的磁盘空间的方法