问题描述
{
"_id" : ObjectId("5f90be124e3e00bdfcc0e32f"),"data": [
{"id": "id1","value": "value1"},{"id": "id2","value": "value2"},{"id": "id3","value": "value3"},{"id": "id4","value": "value4"},{"id": "id5","value": "value5"}
],"extra_value": "Testing","extra_value1": "Testing1"
}
我想用
进行更新{
"_id" : ObjectId("5f90be124e3e00bdfcc0e32f"),"data": [
{"id": "id3","value": "value3-updated"},"value": "value5-updated"},{"id": "id6","value": "value6"}
],"extra_value1": "Testing1-updated"
}
因此必须更新extra_value1
,必须更新两个id
,即3和5,但是由于不存在id6
,因此应将其添加到文档中。最终文件看起来像这样。
{
"_id" : ObjectId("5f90be124e3e00bdfcc0e32f"),"extra_value1": "Testing1-updated"
}
我可以对多个更新查询执行此操作,但不能在单个查询中全部执行操作。有办法做这种事吗?谢谢
解决方法
尝试一下-
db.collection.updateMany(
{_id:ObjectId("5f90be124e3e00bdfcc0e32f") },[{
$set: {
data: {
$map: {
input: "$data",in: {
$mergeObjects: [
"$$this",{
$cond: [
{ $eq: ["$$this.id","id3"] },{ value: "value3-updated" },{$cond: [
{$eq: ["$$this.id","id5"]},{value: "value5-updated"},{}
]}
]
}
]
}
}
},"extra_value1" : "Testing1-updated"
}
}
]
)
这将对id3
,id5
和extra_value1
字段执行所有更新,但仍不会为id6
添加新条目。
花了很多时间来添加它。但是没有运气。我什至不知道那是不可能的。
我还是希望以上查询对您有所帮助。谢谢!