【问题标题】:double nested array with many nested objects update具有许多嵌套对象的双嵌套数组更新
【发布时间】:2022-10-12 21:20:20
【问题描述】:

我需要使用 "2022-01-02" 更新以下结构中的 dateP,但似乎不是一件容易的事:

{
    "_id" : ObjectId("5c05984246a0201286d4b57a"),
    "_a" : [
            {
                    "_onlineStore" : {
                    }
            },
            {
                    "_p" : {
                            "s" : {
                                    "a" : {
                                            "t" : [
                                                    {
                                                            "dateP" : "20200-09-20",
                                                            "l" : "English",
                                                            "size" : "XXL"

                                                    }
                                            ]
                                    }
                            }
                    }
            }
    ]
}

playground

尝试使用 arrayFilters ,但没有成功,因为并非所有元素都存在于所有文档中,而且有些文档非常空,请指教?

MongoDB 4.2 社区

【问题讨论】:

  • 这符合你的要求吗? Demo
  • 似乎我遗漏了一些东西,可能是因为版本是 4.2 但无法正常工作:(
  • 听到这个消息很难过。但无论如何这很奇怪,我不认为这是由于版本问题。 4.2 版的文档显示 example 用于更新嵌套数组元素。

标签: mongodb mongodb-query


【解决方案1】:

相信您需要_a数组的过滤位置运算符来检查文档是否有_p字段。

db.collection.update({},
{
  $set: {
    "_a.$[a]._p.s.a.t.$[x].dateP": "2022-01-02"
  }
},
{
  arrayFilters: [
    {
      "a._p": {
        $exists: true
      }
    },
    {
      "x.dateP": "20200-09-20"
    }
  ]
})

Demo @ Mongo Playground

【讨论】:

  • 这是一个非常好的解决方案!
猜你喜欢
  • 2017-09-11
  • 2019-12-07
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多