我有一个这样的文件
{
"_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"},
{"id": "id5", "value": "value5-updated"},
{"id": "id6", "value": "value6"}
],
"extra_value1": "Testing1-updated"
}
因此必须更新extra_value1
,必须更新两个id
,即3和5,但是由于不存在id6
,因此应将其添加到文档中。最终文件看起来像这样。
{
"_id" : ObjectId("5f90be124e3e00bdfcc0e32f"),
"data": [
{"id": "id1", "value": "value1"},
{"id": "id2", "value": "value2"},
{"id": "id3", "value": "value3-updated"},
{"id": "id4", "value": "value4"},
{"id": "id5", "value": "value5-updated"},
{"id": "id6", "value": "value6"}
],
"extra_value": "Testing",
"extra_value1": "Testing1-updated"
}
我可以对多个更新查询执行此操作,但不能在单个查询中全部执行操作。有办法做这种事吗?谢谢
答案 0 :(得分:0)
尝试一下-
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
添加新条目。
花了很多时间来添加它。但是没有运气。我什至不知道那是不可能的。
我还是希望以上查询对您有所帮助。谢谢!