0

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

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

并且这些特征通过以下方式索引(稀疏):

{ "parentFeatureSetId": 1 }

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

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

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

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

非常感谢!!

4

1 回答 1

0

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

但是,您也可以将类型鉴别器字段 ( _t) 编入索引,这可能会提高性能。在这种情况下,mongo 将与两个索引相交并仅扫描具有正确类型和parentFeatureSetId


重要说明: C# 驱动程序DBFeature在构建查询时不会使用,它只会使用DBPointFeature您指定的文档必须具体说明的内容。泛型AsQueryable只是为了简化使用。

于 2014-06-12T23:41:32.720 回答