如何解决Mongodb Update子文档的值与子文档匹配且不更改其他字段
{
"_id": "5f86da4b5bb9a62742371409","status" : true,"doc": [
{
"_id": "5f86cacbe4d7c423f21faf50","a": 4,"b": null
},{
"_id": "5f86cb01a1ca5124063299c1","a": 6,"b": null
}
]
}
形式的更新
[
{
"_id": "5f86cacbe4d7c423f21faf50","b": 90
},"b": 45
}
]
我如何更新收藏集以使它像这样结束?
{
"_id": "5f86da4b5bb9a62742371409","b": 45
}
]
}
基本上,我只想使用特定键来更新子文档(保持其他键不变)
解决方法
您可以在MongoDB 4.2中使用update with aggregation pipeline,
-
$map
遍历数组doc
的循环,并在内部遍历updateDocs
数组,它将返回匹配的b
,然后$mergeObjects
将返回更新的文档,
let updateDocs = [
{ "_id": mongoose.Types.ObjectId("5f86cacbe4d7c423f21faf50"),"b": 90 },{ "_id": mongoose.Types.ObjectId("5f86cb01a1ca5124063299c1"),"b": 45 }
];
db.collection.updateMany({},[
{
$set: {
doc: {
$map: {
input: "$doc",as: "d",in: {
$mergeObjects: [
"$$d",{
$reduce: {
input: updateDocs,initialValue: {},in: {
$cond: [
{ $eq: ["$$this._id","$$d._id"] },{ b: "$$this.b" },"$$value"
]
}
}
}
]
}
}
}
}
}
]
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。