如何使用父引用删除存储在 mongodb 中的子树
How do I delete a sub tree stored in mongodb with parent reference
我有一个集合,它将树数据存储为 mongo 带有父引用的数据库文档,如 https://docs.mongodb.com/manual/tutorial/model-tree-structures-with-parent-references/
中所述
我的问题是,如何使用 mongodb 查询删除节点(文档)和该节点下的所有文档(子节点等)。我不想解析和获取所有 ID 并删除它们。是否有任何 mongo mongo 查询可以帮助我删除以父引用作为起始参数的整个子树。
提前致谢!
干杯
有点难以想象你在想什么,但你可以运行一个自$graphLookup,并根据该层次结构获取文档列表。
你可以检查一个example I wrote here
管道是
db.collection.aggregate({
$match: {
_id: "Books"
}
},
{
"$graphLookup": {
"from": "collection",
"startWith": "$_id",
"connectFromField": "_id",
"connectToField": "parent",
"as": "ids"
}
},
{
$project: {
"ids": {
$map: {
input: "$ids",
as: "id",
in: "$$id._id"
}
},
"_id": 0
}
})
那么你只需要这样的东西:
db.coll.deleteMany({"_id":{$in:[listHere]}})
到该列表,您需要添加父节点。
我有一个集合,它将树数据存储为 mongo 带有父引用的数据库文档,如 https://docs.mongodb.com/manual/tutorial/model-tree-structures-with-parent-references/
中所述我的问题是,如何使用 mongodb 查询删除节点(文档)和该节点下的所有文档(子节点等)。我不想解析和获取所有 ID 并删除它们。是否有任何 mongo mongo 查询可以帮助我删除以父引用作为起始参数的整个子树。
提前致谢!
干杯
有点难以想象你在想什么,但你可以运行一个自$graphLookup,并根据该层次结构获取文档列表。
你可以检查一个example I wrote here
管道是
db.collection.aggregate({
$match: {
_id: "Books"
}
},
{
"$graphLookup": {
"from": "collection",
"startWith": "$_id",
"connectFromField": "_id",
"connectToField": "parent",
"as": "ids"
}
},
{
$project: {
"ids": {
$map: {
input: "$ids",
as: "id",
in: "$$id._id"
}
},
"_id": 0
}
})
那么你只需要这样的东西:
db.coll.deleteMany({"_id":{$in:[listHere]}})
到该列表,您需要添加父节点。