MongoDB:如何在替换整个文档时增加值

时间:2014-07-12 16:05:23

标签: mongodb

让我们假设以下文件:

{
  "_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是不允许的,还有其他选择吗?

2 个答案:

答案 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的增量。如果您选择在顶层设置单个字段(即不更改文档结构),则还需要取消设置要删除的现有值,如果这不是问题,当然也是一个选项。