0

我有大量文档的集合,我需要使用各种不同的查询对其进行自定义搜索。每个 Document 都有布尔属性。我们称之为“isInTop”。我需要在所有查询中首先显示具有此属性的文档。是的。我可以轻松地在这个领域进行排序,例如:

.sort( { isInTop: -1 } );

并使用字段“isInTop”作为其中的最后一个字段创建适当的索引。但这将缓慢工作,因为mongo 中的索引最适合使用 unique fields。那么有没有解决方案在每个查询的顶部显示带有“isInTop”字段的文档?

我在这里看到两个解决方案。第一:设置需要在“未来”的_id之上的文档。如您所知,ObjectId 包含时间戳。所以我可以使用未来的时间戳创建 ObjectId 并使用自然顺序

第二:为需要在顶部的文件创建单独的集合。并首先在其中进行查询。

这个问题还有其他解决方案吗?哪个会更胖?

更新 我已经通过对代表排名的自定义字段进行排序来完成这个问题。

4

1 回答 1

2

使用您提到的 _id 字段技巧的问题是,在某个时间点您将到达特殊时间,并且您无法更改 _id 字段(无需插入新文档并删除旧文档)。

创建一个仅包含您关心的那些的特殊集合可能是最好的选择。它使您能够在逻辑上(在某种程度上,在物理上)分离文档。

mongodb 中新引入的还有对“稀疏”索引的支持,它也可以满足您的需求。当您希望它是特殊的时,您只能设置“isInTop”字段,然后在其上创建一个稀疏索引,这不会出现您通常使用单个索引布尔字段(在 btrees 中)时遇到的问题。

于 2012-01-22T15:17:42.647 回答