首页 文章

MongoDB C#OfType()索引行为

提问于
浏览
0

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

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

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

{ "parentFeatureSetId": 1 }

据我所知,C#驱动程序在构建查询时使用Type信息 DBFeatureDBPointFeature 作为附加过滤器 .

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

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

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

非常感谢你!!

1 回答

  • 0

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

    但是,您也可以索引类型鉴别器字段( _t ),这可以提高性能 . 在这种情况下,mongo将intersect两个索引并仅扫描具有 both 正确类型和 parentFeatureSetId 的项目的子集


    Important note: C#驱动程序在构建查询时不会使用 DBFeature ,它只会使用 DBPointFeature ,您注意到文档必须是专门的 . 通用 AsQueryable 仅用于简化使用 .

相关问题