mongodb的更新语句
转自:http://www.mongoing.com/docs/tutorial/update-documents.html
更新
MongoDB提供如下方法更新集合中的文档:
| db.collection.updateOne() | 
 即使可能有多个文档通过过滤条件匹配到,但是也最多也只更新一个文档。 3.2 新版功能.  | 
| db.collection.updateMany() | 
 更新所有通过过滤条件匹配到的文档. 3.2 新版功能.  | 
| db.collection.replaceOne() | 
 即使可能有多个文档通过过滤条件匹配到,但是也最多也只替换一个文档。 3.2 新版功能.  | 
| db.collection.update() | 
 即使可能有多个文档通过过滤条件匹配到,但是也最多也只更新或者替换一个文档。 默认情况下, db.collection.update() 只更新 一个 文档。要更新多个文档,请使用 multi 选项。  | 
这些方法接收(如下)参数:
行为表现
原子性
MongoDB中所有的写操作在单一文档层级上是原子的。更多关于MongoDB和原子性的信息,请参见 原子性和事务处理。
_id 字段
一旦设定,你不能更新 _id 字段的值,你也不能用有不同 _id 字段值的替换文档来替换已经存在的文档。
文档大小
当执行更新操作增加的文档大小超过了为该文档分配的空间时。更新操作会在磁盘上重定位该文档。
字段顺序
MongoDB按照文档写入的顺序整理文档字段,除了 如下的情况:
- 
_id 字段始终是文档中的第一个字段。
 - 
包括字段名称的 renaming 操作可能会导致文档中的字段重新排序。
 
在 2.6 版更改: 从2.6版本开始,MongoDB主动尝试保持字段在文档中的顺序。 2.6版本之前,MongoDB不会主动保持文档中的字段的顺序。
Upsert 选项
如果 db.collection.update(),db.collection.updateOne(), db.collection.updateMany() 或者 db.collection.replaceOne() 包含 upsert : true 并且 没有文档匹配指定的过滤器,那么此操作会创建一个新文档并插入它。如果有匹配的文档,那么此操作修改或替换匹配的单个或多个文档。
更多关于新文档创建的细节,请参考该方法的详细页。
示例集合
本页示例使用 mongo shell 中的 db.collection.find() 方法。在 mongo shell 中,如果返回的游标没有赋给使用 var 关键字的变量,那么该游标会自动迭代20次 [1] 来打印出结果中的前20个文档。
要添加示例中涉及的 users 集合,在 mongo shell中运行如下命令:
注解
如果 users 集合中已经包含了相同 _id 值的文档,你需要在插入示例文档前 drop 该集合( db.users.drop() )。
db.users.insertMany(
   [
     {
       _id: 1,
       name: "sue",
       age: 19,
       type: 1,
       status: "P",
       favorites: { artist: "Picasso", food: "pizza" },
       finished: [ 17, 3 ],
       badges: [ "blue", "black" ],
       points: [
          { points: 85, bonus: 20 },
          { points: 85, bonus: 10 }
       ]
     },
     {
       _id: 2,
       name: "bob",
       age: 42,
       type: 1,
       status: "A",
       favorites: { artist: "Miro", food: "meringue" },
       finished: [ 11, 25 ],
       badges: [ "green" ],
       points: [
          { points: 85, bonus: 20 },
          { points: 64, bonus: 12 }
       ]
     },
     {
       _id: 3,
       name: "ahn",
       age: 22,
       type: 2,
       status: "A",
       favorites: { artist: "Cassatt", food: "cake" },
       finished: [ 6 ],
       badges: [ "blue", "Picasso" ],
       points: [
          { points: 81, bonus: 8 },
          { points: 55, bonus: 20 }
       ]
     },
     {
       _id: 4,
       name: "xi",
       age: 34,
       type: 2,
       status: "D",
       favorites: { artist: "Chagall", food: "chocolate" },
       
                    
                