【发布时间】:2013-02-14 13:39:11
【问题描述】:
是否可以通过一次更新来更新文档的两个子数组(无需检索文档,并使用乐观并发更新它)?
假设我有以下文件:
{ "_id" : 2,
"arr1" : [
{ "Id" : 10, "Value" : "abc" },
{ "Id" : 20, "Value" : "abc" },
{ "Id" : 30, "Value" : "abc" },
{ "Id" : 40, "Value" : "abc" },
{ "Id" : 50, "Value" : "abc" }
],
"arr2" : [
{ "Id" : 12, "Text" : "abc" },
{ "Id" : 22, "Text" : "abc" },
{ "Id" : 32, "Text" : "abc" },
{ "Id" : 42, "Text" : "abc" },
{ "Id" : 52, "Text" : "abc" }
]
}
我尝试这样做,但它似乎没有修改正确的子文档:
db.col.update(
{ "_id": 2, arr1: { $elemMatch: { Id: 30 } }, arr2: { $elemMatch: {Id: 42} } },
{ $set: {
"arr1.$.Value": "Changed First",
"arr2.$.Text": "Changed Second"
}
})
【问题讨论】:
-
似乎如果这是一个哈希,它会更好地服务于这个更新。为什么它是一个哈希数组而不是一个哈希?
-
对不起,我不明白你的意思?
-
我的意思是,为什么你的结构不是这样的:pastie.org/6163493?
-
是的,我想你是对的,这可以解决我的问题。键可以是整数还是必须是字符串?
-
它必须是一个字符串 (IIRC)。