使用mongo命令行更新数据

概述

使用update()方法更新文档。这个方法接收以下参数:

  • 一个方档匹配的过滤器,用于过滤要更新的文档
  • 一个用来执行修改操作的更新文档
  • 一个可选的参数

指定过滤器和指定查询的时候是一样的。update()方法默认只更新单个文档,使用multi可选参数指定更新所有匹配的文档。

不能更新文档的_id字段。

更新指定字段

要改变某个字段的值,MongoDB提供了更新操作,比如$set用来修改值。如果字段不存在,$set会创建这个字段。

更新顶级字段

下面的操作更新name字段值为”Juni”的第一个文档,使用$set操作更新cuisine字段,使用$currentDate操作更新lastModified字段。

  1. db.restaurants.update(
  2. { "name" : "Juni" },
  3. {
  4. $set: { "cuisine": "American (New)" },
  5. $currentDate: { "lastModified": true }
  6. }
  7. )

更新操作会返回一个WriteResult对象,它包含更新操作返回的一些状态信息。

更新内嵌文档字段

更新内嵌文档的字段,需要使用“.”号。如下所示:

  1. db.restaurants.update(
  2. { "restaurant_id" : "41156888" },
  3. { $set: { "address.street": "East 31st Street" } }
  4. )

更新多个文档

默认地,update()方法只更新一个文档。如果要更新多个文档,需要指定multi可选参数。

  1. db.restaurants.update(
  2. { "address.zipcode": "10016", cuisine: "Other" },
  3. {
  4. $set: { cuisine: "Category To Be Determined" },
  5. $currentDate: { "lastModified": true }
  6. },
  7. { multi: true}
  8. )

替换文档

要替换一个文档,只需要把一个新的文档传递给update()的第二个参数,并且不需要包含_id字段。如果包含_id字段,只保证跟原文档是同一个值。用于替换的文档可以跟原文档具有完全不同的字段。

  1. db.restaurants.update(
  2. { "restaurant_id" : "41704620" },
  3. {
  4. "name" : "Vella 2",
  5. "address" : {
  6. "coord" : [ -73.9557413, 40.7720266 ],
  7. "building" : "1480",
  8. "street" : "2 Avenue",
  9. "zipcode" : "10075"
  10. }
  11. }
  12. )