我的mongodb集合结构有点像这样
{
"_id": "ObjectId('')",
"user_id": 52,
"messages": [
{
"_id": "ObjectId('')",
"message": "Hello world 1",
"flag": 1
},
{
"_id": "ObjectId('')",
"message": "Hello world 2"
},
{
"_id": "ObjectId('')",
"message": "Hello world 3"
},
{
"_id": "ObjectId('')",
"message": "Hello world 4",
"flag": 1
},
{
"_id": "ObjectId('')",
"message": "Hello world 5",
"flag": 1
},
{
"_id": "ObjectId('')",
"message": "Hello world 6"
}
]
}
我想从每个Message of objects数组
中删除键flag
我使用$
找到了解决方案,但它只删除了第一个元素中的flag
。
有什么办法可以只用一个查询删除所有flag
吗?
我预期的最终结果是
{
"_id": "ObjectId('')",
"user_id": 52,
"messages": [
{
"_id": "ObjectId('')",
"message": "Hello world 1"
},
{
"_id": "ObjectId('')",
"message": "Hello world 2"
},
{
"_id": "ObjectId('')",
"message": "Hello world 3"
},
{
"_id": "ObjectId('')",
"message": "Hello world 4"
},
{
"_id": "ObjectId('')",
"message": "Hello world 5"
},
{
"_id": "ObjectId('')",
"message": "Hello world 6"
}
]
}
答案 0 :(得分:1)
可以使用新的位置运算符$[](自v 3.6起)
db.collection.update( {}, {$unset: {"messages.$[].flag":""}} )