可以使用 update()
方法更新集合的文档,它接受三个参数:
- 适配文档
- 更新文档
- 可选参数
它接受的参数与查询方法一致。
默认 update()
方法只更新单个文档,使用 multi
参数更新所有匹配的文档。
不能更新 _id 字段。
更新最顶层的字段,查询 name 为 Juni 的文档,然后使用 $set 运算符更新 cuisine 字段和用 $currentDate 运算符更新 lastModified 字段值为当前日期。
db.restaurants.update(
{ "name" : "Juni" },
{
$set: { "cuisine": "American (New)" },
$currentDate: { "lastModified": true }
}
)
使用 .
更新嵌套的字段
db.restaurants.update(
{ "restaurant_id" : "41156888" },
{ $set: { "address.street": "East 31st Street" } }
)
更新多个文档
db.restaurants.update(
{ "address.zipcode": "10016", cuisine: "Other" },
{
$set: { cuisine: "Category To Be Determined" },
$currentDate: { "lastModified": true }
},
{ multi: true}
)
替换整个文档
要替换整个文档,可以在第二个参数传递与原始文档所有字段值不一致的新文档,但要注意 _id
是不可变的,如果要传递 _id
,需要与原来的值一致。
db.restaurants.update(
{ "restaurant_id" : "41704620" },
{
"name" : "Vella 2",
"address" : {
"coord" : [ -73.9557413, 40.7720266 ],
"building" : "1480",
"street" : "2 Avenue",
"zipcode" : "10075"
}
}
)
更新或插入
如果 update()
的第一个参数没有匹配的文档,那么默认他不会做任何操作。可以在第三个参数传递 upsert,使 update()
的行为变成有适配文档时更新和没有适配文档时插入数据。