Mongodb 在一次更新中更新两个子数组

Mongodb 在一次更新中更新两个子数组,mongodb,atomic,Mongodb,Atomic,是否可以用一次更新来更新文档的两个子数组(无需检索文档并使用乐观并发进行更新) 假设我有以下文档: { "_id" : 2, "arr1" : [ { "Id" : 10, "Value" : "abc" }, { "Id" : 20, "Value" : "abc" }, { "Id" : 30, "Value" : "abc" }, { "Id" : 40, "Value" : "a

是否可以用一次更新来更新文档的两个子数组(无需检索文档并使用乐观并发进行更新)

假设我有以下文档:

{ "_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" }
           ]
}
我试图这样做,但似乎没有修改正确的子文档:

{ "_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"
      }
    })

在我看来,如果您的数据如下所示,您将能够轻松执行更新:

{ 
  "_id" : 2,
  "arr1" : {
    "10": "abc",
    "20": "abc",
    "30": "abc",
    "40": "abc",
    "50": "abc"

  }
}

似乎如果这是一个散列,它会更好地服务于此更新。为什么它是一个散列数组而不是一个散列?对不起,我不明白你的意思?我的意思是,为什么你的结构不是这样:?是的,我想你是对的,这会解决我的问题。键可以是整数还是必须是字符串?它必须是字符串(IIRC)。