只是想知道实现此目标的最佳方法是什么。我可以想到一些复杂的方法,但它们似乎不正确。
我想要做的是从文档中删除所有子数组对象。如下所示:
SCHEMA
schema {
person: Array<{
id: string;
posts: Array<{
id: string,
comments: Array<{
id: string
tagged_person_id: string;
}>
}>
}>
}
我正在寻找某种方法来删除评论中具有tagged_person_id == some_id
的每个人在每个帖子中的所有评论。这不是我的实际用例,但是它代表了相同的概念。
我知道如何使用$pull
从一个子文档的子数组中删除,但是只是不确定如何在一个查询中完成所有这些操作,或者甚至不可能。
答案 0 :(得分:0)
根据JIRA票据SERVER-1243和documentation,从MongoDB v3.5.12开始,给出以下文档:
{
"posts" : [
{
"comments" : [
{
"tagged_person_id" : "x"
},
{
"tagged_person_id" : "y"
}
]
},
{
"comments" : [
{
"tagged_person_id" : "x"
}
]
},
{
"comments" : [
{
"tagged_person_id" : "y"
}
]
}
]
}
您可以运行此更新:
db.collection.update({}, {
$pull : {
"posts.$[].comments" : {"tagged_person_id": "x"}
}
})
以便删除tagged_person_id
等于"x"
的所有注释。
结果:
{
"posts" : [
{
"comments" : [
{
"tagged_person_id" : "y"
}
]
},
{
"comments" : []
},
{
"comments" : [
{
"tagged_person_id" : "y"
}
]
}
]
}