一、批量更新

默认只对符合条件的一条文档更新

1
2
3
4
5
6
7
8
> db.post. find ()   
"_id"  : ObjectId( "54a530c3ff0df3732bac1681" ),  "id"  : 2,  "name"  "joe" "age"  : 49 }   
"_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),  "id"  : 1,  "name"  "joe" "age"  : 21,  "comments"  : [  "test2" "test9" "test5"  ] }
> db.post.update({ "name" : "joe" }, {$ set :{ "age" :70}})   
WriteResult({  "nMatched"  : 1,  "nUpserted"  : 0,  "nModified"  : 1 })    
> db.post. find ()    
"_id"  : ObjectId( "54a530c3ff0df3732bac1681" ),  "id"  : 2,  "name"  "joe" "age"  : 70 }  
"_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),  "id"  : 1,  "name"  "joe" "age"  : 21,  "comments"  : [  "test2" "test9" "test5"  ] }    >

  
利用update的第四个参数进行批量更新:

1
2
3
4
5
> db.post.update({ "name" : "joe" }, {$ set :{ "age" :30}}, false , true )   
WriteResult({  "nMatched"  : 2,  "nUpserted"  : 0,  "nModified"  : 2 })> db.post. find ()    
"_id"  : ObjectId( "54a530c3ff0df3732bac1681" ),  "id"  : 2,  "name"  "joe" "age"  : 30 }   
"_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),  "id"  : 1,  "name"  "joe" "age"  : 30,  "comments"  : [  "test2" "test9" "test5"  ] }    
>

附注:update方法参考

update( criteria, objNew, upsert, multi )    
criteria : update的查询条件,类似sql update查询内where后面的    
objNew   : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的    
upsert   : 这个参数的意思是,无论false还是true,没有匹配的键则新增加一个;

multi    : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

 

二、更新文档键值,无键值的则新增键值;

1
2
3
4
5
6
7
8
9
10
> db.post.update({ "name" : "joe" }, {$ set :{ "sex" :1}}, false , true )   
WriteResult({  "nMatched"  : 2,  "nUpserted"  : 0,  "nModified"  : 2 })    
> db.post. find ()    
"_id"  : ObjectId( "54a530c3ff0df3732bac1681" ),  "id"  : 2,  "name"  "joe" "age"  : 30,  "sex"  : 1 }    
"_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),  "id"  : 1,  "name"  "joe" "age"  : 30,  "comments"  : [  "test2" "test9" "test5"  ],  "sex"  : 1 }    
> db.post.update({ "name" : "joe" }, {$ set :{ "school" : "marry" }}, true , true )    
WriteResult({  "nMatched"  : 2,  "nUpserted"  : 0,  "nModified"  : 2 })    
> db.post. find ()    
"_id"  : ObjectId( "54a530c3ff0df3732bac1681" ),  "id"  : 2,  "name"  "joe" "age"  : 30,  "sex"  : 1,  "school"  "marry"  }    
"_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),  "id"  : 1,  "name"  "joe" "age"  : 30,  "comments"  : [  "test2" "test9" "test5"  ],  "sex"  : 1,  "school"  "marry"  }    >