假设我有以下条目:
{
name: 'Bob',
a: {
02910143: { val: 10 },
101B70BB: { val: 20 },
7A6C86F1: { val: 10 },
}
}
请注意,objecta
的键是哈希,因此我不知道它们的名称。我正在尝试编写我的查询,以删除val
为10的所有条目。我有以下内容,但我似乎无法弄清楚如何遍历所有嵌套对象:
db.collection('myCollection').deleteMany({ 'a.$.val': 10 })
如何使它能够检查a
中的任何键值条目?
您可以使用$arrayToObject
将a
首先转换为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"
}
}
}
])
这里是蒙哥游乐场供大家参考。