让我们假设以下文件:
{
"_id" : ObjectId("53b986e2fe000000019a5a13"),
"name" : "Joe",
"birthDate" : "2080-12-11",
"publications" : [
{ "title" : "title 1", "description" : "description 1" },
{ "title" : "title 2", "description" : "description 2" }
],
"version" : 1
}
我需要像这样替换整个文档......
db.test.update({"_id": ObjectId("53b986e2fe000000019a5a13")}, {
"_id" : ObjectId("53b986e2fe000000019a5a13"),
"name" : "Joe",
"birthDate" : "1980-12-11",
"publications" : [
{ "title" : "bye bye", "description" : "Blah blah" },
{ "title" : "title 2", "description" : "description 2" },
{ "title" : "title 3", "description" : "description 3" }
]
})
...但我还需要将文档version
增加一个。由于在这种情况下$inc
是不允许的,还有其他选择吗?
答案 0 :(得分:1)
您可以将更新$inc
的{{1}}与更新其余字段的version
合并:
$set
答案 1 :(得分:0)
我不知道如何将批量替换组合在同一子文档中作为增量,但是如果您可以将数据放在子文档中以便可以使用$set
,那么它将起作用; < / p>
> db.test.insert({ doc: { a: 1 }, version: 1 })
> db.test.update({ }, { $set: { doc: { b: 1 } }, $inc: { version: 1 } })
> db.test.find().pretty()
{
"_id" : ObjectId("53c1600fd904c83d877daf21"),
"doc" : {
"b" : 1
},
"version" : 2
}
请注意doc
的批量替换和version
的增量。如果您选择在顶层设置单个字段(即不更改文档结构),则还需要取消设置要删除的现有值,如果这不是问题,当然也是一个选项。