查询视图时,我很难找到有关MongoDB使用索引的更多信息。 The docs state:
索引使用和排序操作
视图使用基础集合的索引。
由于索引位于基础集合上,因此您无法创建, 直接在视图上删除或重建索引,也不获取列表 视图上的索引。
您不能在视图上指定$ natural排序。
aaa就是这样。我正在尝试找出如何正确索引基础集合(基于我对SQL DB的经验),以最大程度地提高应用程序对视图的查询性能。
例如,假设我有一个集合,其中一个集合包含一个products
集合中的Product实体,它们共享deleted
和categoryId
属性。最重要的是,我可能会创建一个定义为productsActive
的视图{ deleted: false }
,并在products
集合的索引上创建一个视图:{ deleted: 1 }
。现在,我们通常执行以下查询:
db.productsActive.find({categoryId: 'turntable'});
直觉上,我想在products
表上使用复合索引:
db.products.createIndex({deleted: 1, categoryId: 1});
我做对了吗?我想最终我对文档的声明感到困惑:
视图使用基础集合的索引。
鉴于此,mongo可以使用复合索引最初构建视图,然后再查询视图吗?还是只是简单地将视图推导出一个步骤(绑定到1个索引),然后对视图的后续查询又是第二个具有自己索引的独特查询?
答案 0 :(得分:1)
是的,按照描述创建compound index可以解决问题。 (顺便说一句,在建立索引时,您可能应该使用background参数。)
鉴于此,mongo可以使用复合索引来初始构建 查看,然后进行查询?
这里views are created on demand确实没有“构建视图”。索引存在于集合上,并由视图和match the index definition的其他查询使用。
希望这会有所帮助。