我有一个Mongo数据库集合中的数据,其中每个文档都有父节点的标识。如果我想搜索所有具有特定文档(我将其称为P)的文档(即P是父母,祖父母,祖父母等),那么我有什么选择可以有效地做到这一点,并且那些选项的优点和缺点是什么?如何在mongo中高效搜索树的子集?
我能想到如下:每个文档中
- 存储整个血统,所以你可以搜索文档谁的祖先列表中包含P.
- 优势:
- 固定的时间看up
- 缺点:
- 如果更改了父项,则相应的更新为O(n),其中n是父项已更改的文档的后代数
- 某些存储开销O(a)其中a是文档的平均深度
- 优势:
- 在搜索时,先建普的子文档,然后孙子文件等的ID的列表,然后搜索所有文件与IDS
- 优势:
- 无需改变存储Ë结构,不需要额外的空间开销
- 弱点:
- 构建ID列表是为O(n)操作,其中n是文件的数量与P
- 后代的可能上百个搜索IDS的可能不是有效的
- 优势:
任何人都知道的其他技术?
你看过 - http://docs.mongodb.org/manual/applications/data-models-tree-structures/? – BatScream 2014-12-02 22:07:50
我没有,但它是一个非常相关的参考。看起来像“祖先阵列”和“物化路径”本质上是相同的东西,都是我的第一选择。嵌套设置对我来说不是一种选择,其他两个实质上就是我已经在做的 – 2014-12-02 23:40:03