假设我对集合有这个查询:
var dbMarkers = Features.AsQueryable<DBFeature>()
.OfType<DBPointFeature>()
.Where(f => f.parentFeatureSetId = parentFeatureSetId );
并且通过以下方式对要素进行索引(稀疏):
{ "parentFeatureSetId": 1 }
据我所知,C#驱动程序在构建查询时使用Type信息 DBFeature 和 DBPointFeature 作为附加过滤器 .
我想知道在类型Query之前是否应用了索引,因此它将仅限于索引子集 .
如果没有,它将首先获取特定类型的所有项目(这是一个比定义的集合大得多的集合),并且索引几乎没有意义 .
在这种情况下,MongoDB的行为是什么?
非常感谢你!!
1 回答
如果仅索引
parentFeatureSetId
,那么这将是MongoDB
使用的索引 . 它将首先找到具有指定parentFeatureSetId
的文档,然后扫描它们以查找具有正确类型的文档 .但是,您也可以索引类型鉴别器字段(
_t
),这可以提高性能 . 在这种情况下,mongo将intersect两个索引并仅扫描具有 both 正确类型和parentFeatureSetId
的项目的子集Important note: C#驱动程序在构建查询时不会使用
DBFeature
,它只会使用DBPointFeature
,您注意到文档必须是专门的 . 通用AsQueryable
仅用于简化使用 .