如何使用 MongoDB 在数组中的对象中更新数组中的对象中的文档?
Posted
技术标签:
【中文标题】如何使用 MongoDB 在数组中的对象中更新数组中的对象中的文档?【英文标题】:How to update document in an object in an array in an object in an array using MongoDB? 【发布时间】:2020-06-13 04:18:13 【问题描述】:使用 MongoDB 查询:
1.如何找到_id A3
的对象?
2. 如何将 _id A3
的对象更新为 A4
?请注意:数据库是一个对象数组,其中一个键具有一个对象数组
[
"project_name": "ProjectA",
"issues":["issue_title":"TitleA1", "_id":"A1",
"issue_title":"TitleA2","_id":"A2",
"issue_title":"TitleA3","_id":"A3"]
,
"project_name": "ProjectB",
"issues":["issue_title":"TitleB1", "_id":"B1",
"issue_title":"TitleB2","_id":"B2",
"issue_title":"TitleB3","_id":"B3"]
]
【问题讨论】:
【参考方案1】:您可以通过嵌套_id
使用dot notation 到$match 您的对象,并使用$unwind 和$replaceRoot 将嵌套对象提升到顶层:
db.collection.aggregate([
$unwind: "$issues"
,
$match: "issues._id": "A3"
,
$replaceRoot: newRoot: "$issues"
])
Mongo Playground
positional operator 可以用来更新那个:
db.col.updateOne( "project_name": "ProjectA", "issues._id": "A3" , $set: "issues.$._id": "A4" )
【讨论】:
我不确定这是否有效,因为起始数据集是一个数组...您能否确认您的代码可以绕过 2 个数组?我不确定我测试代码是否错误,或者代码是否无法访问双数组。也许它需要 $elemMatch 某处,但我尝试了很多次,但无法让它工作 是这样的:mongoplayground.net/p/8yPdPJ1C2cB 吗?或者你能准确地展示单个物体的样子吗? 啊,是的,就像在那个操场上一样。问题 1 是如何自己返回这个对象 "issue_title":"TitleA3","_id":"A3"。我尝试了您建议的代码,但它给了我错误,也许我们需要以某种方式集成“聚合”? @wongz 修改了我的答案 谢谢,第一个代码有效。第二个可能也需要聚合?以上是关于如何使用 MongoDB 在数组中的对象中更新数组中的对象中的文档?的主要内容,如果未能解决你的问题,请参考以下文章