MongoDB索引和视图

时间:2018-11-14 21:02:43

标签: mongodb performance indexing

查询视图时,我很难找到有关MongoDB使用索引的更多信息。 The docs state

  

索引使用和排序操作

     

视图使用基础集合的索引。

     

由于索引位于基础集合上,因此您无法创建,   直接在视图上删除或重建索引,也不获取列表   视图上的索引。

     

您不能在视图上指定$ natural排序。

aaa就是这样。我正在尝试找出如何正确索引基础集合(基于我对SQL DB的经验),以最大程度地提高应用程序对视图的查询性能。

例如,假设我有一个集合,其中一个集合包含一个products集合中的Product实体,它们共享deletedcategoryId属性。最重要的是,我可能会创建一个定义为productsActive的视图{ deleted: false },并在products集合的索引上创建一个视图:{ deleted: 1 }。现在,我们通常执行以下查询:

db.productsActive.find({categoryId: 'turntable'});

直觉上,我想在products表上使用复合索引:

db.products.createIndex({deleted: 1, categoryId: 1});

我做对了吗?我想最终我对文档的声明感到困惑:

  

视图使用基础集合的索引。

鉴于此,mongo可以使用复合索引最初构建视图,然后再查询视图吗?还是只是简单地将视图推导出一个步骤(绑定到1个索引),然后对视图的后续查询又是第二个具有自己索引的独特查询?

1 个答案:

答案 0 :(得分:1)

是的,按照描述创建compound index可以解决问题。 (顺便说一句,在建立索引时,您可能应该使用background参数。)

  

鉴于此,mongo可以使用复合索引来初始构建   查看,然后进行查询?

这里views are created on demand确实没有“构建视图”。索引存在于集合上,并由视图和match the index definition的其他查询使用。

希望这会有所帮助。