更新操作和查询操作博大精深。需要好好理解。
1、强硬的文档替换式更新操作
b952e33c-eda8-414d-9900-008c62c31e98.png
2、主键冲突的时候会报错并且停止更新操作
因为是强硬替换当替换的文档和已有文档ID冲突的时候则系统会报错
3、insertOrUpdate操作
目的:查询器查出来数据就执行更新操作,查不出来就替换操作
做法:db.[documentName].update({查询器},{修改器},true)
245fa8a2-e682-4fc1-bf64-852fdb06f3db.png
4、批量更新操作
默认情况当查询器查询出多条数据的时候默认就修改第一条数据如何实现批量修改
71cb9f3c-79ce-4d5e-8bb3-3963975cdf3f.png
5、使用修改器来完成局部更新操作
名称 语法 案例 备注说明
$set {$set:{field:value}} {$set:{name:”uspcat”}} 它用来指定一个键值对,如果存在键就进行修改不存在则进行添加.
$inc {$inc:{field:value}} {$inc:{"count":1}} 只是使用与数字类型,他可以为指定的键对应的数字类型的数值进行加减操作.
$unset {$unset:{filed:1}} { $unset : { “name":1 }
他的用法很简单,就是删除指定的键
$push { $push : { field : value } }
{ $push : { books:”JS”}
1.如果指定的键是数组增追加新的数值
2.如果指定的键不是数组则中断当前操作Cannot apply $push/$pushAll modifier to non-array
3.如果不存在指定的键则创建数组类型的键值对
$pushAll
{ $pushAll : { field : array } } { $push : { books:[“EXTJS”,”JS”]}
用法和$push相似他可以体谅添加数组数据
$addToSet
{ $addToSet: { field : value } } { $addToSet: { books:”JS”}
目标数组存在此项则不操作,不存在此项则加进去
$pop
{$pop:{field: value}}
{$pop:{name:1}} {$pop:{name:-1}} 从指定数组删除一个值1删除最后一个数值,-1删除第一个数值
$pull {$pull:{filed:value}} {$pull:{"book":"JS"}} 删除一个被指定的值
$pullAll {$pullAll:{filed:array}} {$pullAll:{"name":["JS","JAVA"]}} 一次性删除多个指定的数值
$ { $push : { field : value } }
{ $push : { books:”JS”}
1.数组定位器,如果数组有多个数值我们只想对其中一部分进行操作我们就要用到定位器($)
例子:
例如有文档{name:”YFC”,age:27,books:[{type:’JS’,name:”EXTJS4”},{type:”JS”,name:”JQUERY”},{type:”DB”,name:”MONGODB”}]}
我们要把type等于JS的文档增加一个相同的作者author是USPCAT
办法:
db.text.update({"books.type":"JS"},{$set:{"books.$.author":"USPCAT"}})
6、$addToSet和$each结合完成批量数值更新
8、runCommand函数和findAndModify函数
runCommand可以执行mongoDB中的特殊函数
    findAndModify就是特殊函数之一他的用于是返回update或remove后的文档
    runCommand({“findAndModify”:”processes”,
           query:{查询器},
         sort{排序},
         new:true
         update:{更新器},
         remove:true
      }).value
       ps = db.runCommand({
              "findAndModify":"persons",
              "query":{"name":"text"},
               "update":{"$set":{"email":"1221"}},
               "new":true
}).value
do_something(ps)
http://www.cppblog.com/byc/archive/2011/07/15/151063.aspx