MongoDB-树结构-查找没有孩子的父母



Am将树结构存储为

{_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.

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

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

在当前的设计中,您需要查询所有祖先节点,并执行一个条件为{type:type1,_id:$nin[]}的查询。如果需要的话,这个查询和两步过程不会产生良好的性能。此外,因为它需要两个步骤,所以您需要仔细考虑事务是否相关——两个阶段的提交会增加额外的开销。

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

最新更新