1

我将树结构存储为

{_id:1, type:type1, text:xxxx}
{_id:2, type:type2, text:xxxx, ancestorIDs:[ObjectId(1)]}
{_id:3, type:type2, text:xxxx, ancestorIDs:[ObjectId(1), ObjectId(2)]}
{_id:4, type:type1, text:xxxx}
{_id:5, type:type1, text:xxxx}

我需要找到没有任何子节点的所有 type1 节点的列表。例如。节点 4 和 5。

4

1 回答 1

1

您的需求的典型模式还包括在每个节点文档中保留一组子节点。mongodb.org 文档提供了一些很好的树结构模式示例:

http://docs.mongodb.org/manual/tutorial/model-tree-structures/

使用您当前的设计,您需要查询所有祖先节点,并执行具有类似 {type:type1, _id:$nin[]} 的条件的查询。如果需要,此查询和两步过程不会产生良好的性能。此外,由于它需要两个步骤,因此您需要考虑是否涉及事务 - 2 阶段提交会增加额外的开销。

因此,该模式通常还包括一个子数组,它允许您快速执行类似 {type:type1, children:{$size:0}} 的查询(或者您可以选择使用 $exists)。通常,维护这些引用会产生更好的权衡,因为树结构不会经常更改,而查询性能更重要。

于 2013-07-27T19:29:30.730 回答