【问题标题】:MongoDB C# OfType() Indexing behaviorMongoDB C# OfType() 索引行为
【发布时间】:2014-06-12 23:37:30
【问题描述】:

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

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

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

{ "parentFeatureSetId": 1 }

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

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

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

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

非常感谢!!

【问题讨论】:

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


    【解决方案1】:

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

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

    的项目子集

    重要提示: C# 驱动程序在构建查询时不会使用DBFeature,它只会使用DBPointFeature,您注意到文档必须是专门的。通用的AsQueryable 只是为了方便使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2019-07-30
      相关资源
      最近更新 更多