我正在尝试在文档及其子文档中添加版本控制级别。这是一个架构示例
{
"_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
。还有更好的方法吗?
答案 0 :(得分:1)
如果您考虑将传递给MongoDB命令的参数作为JSON文档而不是字符串,这是完全合理的:传入相同的运算符两次(如在$inc
开头,然后是另一个{ {1}}再次在您的示例中)将创建仅包含最后一个参数的JSON文档。如果您在此处使用的字符串实际上代表具有两个$inc
字段的JSON文档,则会有所不同。
所以这里是如何做到正确的(基本上通过$inc两个字段作为单个操作的一部分):
$inc