【问题标题】:MongoDB: Remove attribute from nested Object ArrayMongoDB:从嵌套对象数组中删除属性
【发布时间】:2021-03-24 22:49:06
【问题描述】:

我必须从对象数组中的深层嵌套对象中删除一个属性。
它看起来像这样:

我只想为一个特定的Period类型取消设置IndividualAgePast
对于一个名为“HouseKeepingDamageCost”的特定Block,如果它存在。
我必须小心,因为里面的其他对象Blocks和
其他Periods也有一个叫“IndividualAge”的属性,可以留下来。
有人能帮我吗 ?我用 $elemMatch 尝试过,但没有成功。

提前致谢。

Playgorund 与我的数据和查询:Mongoplayground

【问题讨论】:

  • 添加示例数据以及您尝试过的查询mongoplayground.net 并使用链接更新故事。
  • @TusharGupta-curioustushar 我确实添加了数据和我的尝试,请检查。

标签: mongodb multidimensional-array


【解决方案1】:

您想使用arrayfilters 这样做:

db.collection.update({},
{
  "$unset": {
    "Blocks.$[block].Periods.$[period].IndividualAge": ""
  }
},
{
  "multi": false,
  arrayFilters: [
    {
      "block.Name": "HouseKeepingDamageCost"
    },
    {
      "period.Type": "Past"
    }
  ]
})

Mongo Playground

【讨论】:

  • 这不适用于我提供的数据。 mongoplayground.net/p/-Apag7fTtN-
  • HousekeepingDamageCost 在链接中的数据中没有大写 K。不管它是否适用于我的玩具示例,只需将其调整为您的代码并确保值符合您的意图。
猜你喜欢
  • 2021-10-29
  • 1970-01-01
  • 2021-01-30
  • 2021-04-19
  • 2021-07-03
  • 2020-12-20
  • 2020-10-30
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多