MongoDB C#OfType()索引行为

时间:2014-06-12 23:37:30

标签: c# .net mongodb-.net-driver mongodb-indexes

假设我对集合有这个查询:

var dbMarkers = Features.AsQueryable<DBFeature>()
                        .OfType<DBPointFeature>()
                        .Where(f => f.parentFeatureSetId = parentFeatureSetId );

通过以下方式对要素进行索引(稀疏):

{ "parentFeatureSetId": 1 }

据我所知,C#驱动程序在构建查询时使用类型信息 DBFeature DBPointFeature 作为附加过滤器。

我想知道在类型查询之前是否应用了索引,因此它将仅限于索引子集。

如果没有,它将首先获取特定类型的所有项目(这是一个比识别集大得多的集合),并且索引几乎没有意义。

在这种情况下,MongoDB的行为是什么?

非常感谢!!

1 个答案:

答案 0 :(得分:0)

如果仅对parentFeatureSetId编制索引,那么这将是MongoDB使用的索引。它将首先找到具有指定parentFeatureSetId的文档,然后扫描它们以查找具有正确类型的文档。

但也可以将类型标识符字段(_t)编入索引,这可以提高性能。在这种情况下,mongo将intersect两个索引并仅扫描两者正确类型和parentFeatureSetId

的项目子集

重要提示:在构建查询时,C#驱动程序不会使用DBFeature,它只会使用您注意到文档必须具体的DBPointFeature。通用AsQueryable仅用于简化使用。