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