我在MongoDB中有这样的文档:
{
"parserErgebnis": [
{
"values": {
"prop1": {
"status": "OK",
"wert": "03.00"
},
"prop2": {
"status": "OK",
"wert": "1"
}
}
},
{
"values": {
"prop1": {
"status": "OK",
"wert": "03.00"
},
"prop5": {
"status": "OK",
"wert": "1"
}
}
}
]
}
我想取消设置所有字段的“状态”。我知道某个状态的unset看起来像这样:
db.collection.update({},
{
$unset: {
"parserErgebnis.$[].values.prop1.status": 1
}
},
{
multi: true
})
然而,我想一次性删除所有的“状态”字段(甚至不知道 prop 基本上是如何命名的)。我基本上需要一种通配符机制,就像这样(PSEUDOCODE NOT WORKING):
db.collection.update({},
{
$unset: {
"parserErgebnis.$[].values.*.status": 1
}
},
{
multi: true
})
有没有一种方法可以让它工作,或者有没有一种替代方法?谢谢你的帮助
1条答案
按热度按时间jm81lzqq1#
没有直接的方法可以从动态属性中删除属性,但是可以从MongoDB 4.2开始使用update with aggregation pipeline。
$map
迭代parserErgebnis
数组的循环$objectToArray
将values
对象转换为键值(k-v)格式的数组$map
迭代上面转换的(k-v)数组的循环,并按原样返回k
,v
值不包括status属性$arrayToObject
将值转换回对象$mergeObjects
合并当前对象和新更新的values
对象Playrgound
update()方法折旧,您可以使用updateMany()方法.