提问者:小点点

MongoDB查询:如果对象中的任何嵌套对象具有键值,则删除条目


假设我有以下条目:

{
  name: 'Bob',
  a: {
    02910143: { val: 10 },
    101B70BB: { val: 20 },
    7A6C86F1: { val: 10 },
  }
}

请注意,objecta的键是哈希,因此我不知道它们的名称。我正在尝试编写我的查询,以删除val为10的所有条目。我有以下内容,但我似乎无法弄清楚如何遍历所有嵌套对象:

db.collection('myCollection').deleteMany({ 'a.$.val': 10 })

如何使它能够检查a中的任何键值条目?


共1个答案

匿名用户

您可以使用$arrayToObjecta首先转换为k-v元组的数组。然后使用$filter去除不等于10的值。最后使用$arrayToObject转换回原始形式

db.collection.aggregate([
  {
    "$addFields": {
      "a": {
        "$objectToArray": "$a"
      }
    }
  },
  {
    "$addFields": {
      "a": {
        "$filter": {
          "input": "$a",
          "as": "a",
          "cond": {
            $ne: [
              "$$a.v.val",
              10
            ]
          }
        }
      }
    }
  },
  {
    "$addFields": {
      "a": {
        "$arrayToObject": "$a"
      }
    }
  }
])

这里是蒙哥游乐场供大家参考。