Mongo DB如何在树中找到孤儿?
Mongo DB how to find orphans in a tree?
我有 trees
集合,其中包含具有树状结构的对象。我实际上使用的是 child references pattern,但在我的例子中,每棵树的深度是未定义的——它可能在 [0:100]
范围内,大约是:
{
"_id": "tree1",
"tag_id": "1",
"children": [
{
"_id": "tree2",
"tag_id": "2",
"children": [
{
"_id": "tree3",
"tag_id": "3"
}
]
},
{
"_id": "tree4",
"tag_id": "4"
}
]
}
我还有一个简单的 tags
集合,其中包含以下对象:
[
{
"_id": "1",
"name": "one"
},
{
"_id": "2",
"name": "two"
},
{
"_id": "3",
"name": "three"
},
{
"_id": "4",
"name": "four"
},
{
"_id": "5",
"name": "five"
}
]
如您所见,我有一个孤儿 (5),它在 trees
集合中没有 link:
{
"_id": "5",
"name": "five"
}
我想找到所有这些孤儿并将它们从 tags
集合中删除。
我尝试将 aggregate
方法与 $lookup
:
一起使用
db.tags.aggregate(
[
{$lookup:
{
from: "trees",
localField: "_id",
foreignField: "tag_id",
as: "matched_docs"
}
}
]
);
但是这种方法加入并仅查找“顶部”连接而不查看子数组。
如何使用 mongo 查询解决任务?也许,使用不同的数据结构、模式或其他聚合方法会更好?
根据最新版本documentation
Nested Depth for BSON Documents
MongoDB supports no more than 100 levels of nesting for BSON
documents. Each object or array adds a level.
Mongodb 不适合此架构。因此,您无法通过深度嵌套数组的巨大动态级别来实现这一点。
您可以更改架构或数据存储。
我有 trees
集合,其中包含具有树状结构的对象。我实际上使用的是 child references pattern,但在我的例子中,每棵树的深度是未定义的——它可能在 [0:100]
范围内,大约是:
{
"_id": "tree1",
"tag_id": "1",
"children": [
{
"_id": "tree2",
"tag_id": "2",
"children": [
{
"_id": "tree3",
"tag_id": "3"
}
]
},
{
"_id": "tree4",
"tag_id": "4"
}
]
}
我还有一个简单的 tags
集合,其中包含以下对象:
[
{
"_id": "1",
"name": "one"
},
{
"_id": "2",
"name": "two"
},
{
"_id": "3",
"name": "three"
},
{
"_id": "4",
"name": "four"
},
{
"_id": "5",
"name": "five"
}
]
如您所见,我有一个孤儿 (5),它在 trees
集合中没有 link:
{
"_id": "5",
"name": "five"
}
我想找到所有这些孤儿并将它们从 tags
集合中删除。
我尝试将 aggregate
方法与 $lookup
:
db.tags.aggregate(
[
{$lookup:
{
from: "trees",
localField: "_id",
foreignField: "tag_id",
as: "matched_docs"
}
}
]
);
但是这种方法加入并仅查找“顶部”连接而不查看子数组。 如何使用 mongo 查询解决任务?也许,使用不同的数据结构、模式或其他聚合方法会更好?
根据最新版本documentation
Nested Depth for BSON Documents MongoDB supports no more than 100 levels of nesting for BSON documents. Each object or array adds a level.
Mongodb 不适合此架构。因此,您无法通过深度嵌套数组的巨大动态级别来实现这一点。
您可以更改架构或数据存储。