【发布时间】:2015-01-31 07:00:39
【问题描述】:
我在 Mongo 数据库集合中有数据,其中每个文档都有父级的 id。如果我想搜索在其祖先中具有特定文档(我将其称为 P)的所有文档(即 P 是它的父母、祖父母、曾祖父母等),我有什么选择可以有效地做到这一点,并且这些选项的优缺点是什么?
我能想到以下几点:
- 将整个祖先存储在每个文档中,这样您就可以搜索祖先列表中包含 P 的文档。
- 优势:
- 恒定时间查找
- 缺点:
- 如果更改了父级,则相应的更新为 O(n),其中 n 是更改了父级的文档的后代数
- 一些存储开销,O(a),其中 a 是文档的平均深度
- 优势:
- 搜索时,首先建立一个P的子文档的id列表,然后是孙文档等。然后搜索所有具有这些id的文档
- 优势:
- 无需更改存储结构,无需额外的空间开销
- 缺点:
- 建立 id 列表是一个 O(n) 操作,其中 n 是 P 的后代文档数
- 按可能数百个 ID 进行搜索可能效率不高
- 优势:
有人知道其他技术吗?
【问题讨论】:
-
你调查过 - docs.mongodb.org/manual/applications/… 吗?
-
我没有,但它是一个非常相关的参考。看起来“祖先数组”和“物化路径”本质上是一样的,都是我在那里的第一个选择。嵌套集对我来说不是一个选项,另外两个基本上是我已经在做的
标签: mongodb search indexing tree