【问题标题】:Update two sub-arrays in one update一次更新两个子数组
【发布时间】: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)。

标签: mongodb atomic


【解决方案1】:

在我看来,如果您的数据看起来像这样,您将能够轻松地执行更新:

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

  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多