递增子文档和父文档中的版本号

时间:2017-10-01 18:33:31

标签: mongodb

我正在尝试在文档及其子文档中添加版本控制级别。这是一个架构示例

{
    "_id" : ObjectId("59d1312a8ee6de1858933950"),
    "synonyms" : [ 
        {
            "_id" : ObjectId("59d1312a8ee6de1858933954"),
            "text" : [ 
                1.0, 
                2.0, 
                3.0
            ],
            "__v" : 1.0
        }, 
        {
            "_id" : ObjectId("59d1312a8ee6de1858933953"),
            "text" : [ 
                "Foo ", 
                "bar ", 
                "Baz"
            ],
            "__v" : 0
        }, 
        {
            "_id" : ObjectId("59d1312a8ee6de1858933951"),
            "text" : [ 
                "fizz", 
                "bazz", 
                "bizz"
            ],
            "__v" : 0
        }
    ],
    "__v" : 3.0
}

如您所见,父文档有自己的__v,而每个子文档(同义词数组的一部分)也有__v。我想要完成的是这个

  • 更新子文档数组时 - 增加子文档的版本及其父版本

为此,我尝试了下面的代码

db.collection.update({
    '_id': ObjectId("59d1312a8ee6de1858933950"),
    "synonyms._id": ObjectId("59d1312a8ee6de1858933954")
},
    {$set: {'synonyms.$.text': [1,2,3]}, $inc: {'synonyms.$.__v': 1}, $inc: {"__v": 1}}
)

我的父__v每次更新都会增加,但无论我经历多少次更新,子文档似乎都停留在1.0。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您考虑将传递给MongoDB命令的参数作为JSON文档而不是字符串,这是完全合理的:传入相同的运算符两次(如在$inc开头,然后是另一个{ {1}}再次在您的示例中)将创建仅包含最后一个参数的JSON文档。如果您在此处使用的字符串实际上代表具有两个$inc字段的JSON文档,则会有所不同。

所以这里是如何做到正确的(基本上通过$inc两个字段作为单个操作的一部分):

$inc