0

コレクションに対して次のクエリがあるとします。

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

また、機能は次のようにインデックス化 (スパース) されます。

{ "parentFeatureSetId": 1 }

私が理解しているように、C# ドライバーは、クエリを作成するときに Type 情報DBFeatureDBPointFeatureを追加のフィルターとして使用します。

インデックスがタイプクエリの前に適用されるかどうかを知りたいので、インデックスサブセットに限定されます。

そうでない場合は、最初に特定のタイプのすべてのアイテムをフェッチすることになり (これは、idexed セットよりもはるかに大きいセットです)、インデックスはほとんど無意味になります。

この場合、MongoDB の動作はどうなりますか?

どうもありがとうございました!!

4

1 に答える 1

0

のみparentFeatureSetIdがインデックス付けされている場合、それがインデックスのMongoDB使用になります。最初に指定されたドキュメントを検索し、parentFeatureSetId次に正しいタイプのドキュメントをスキャンします。

ただし、タイプ識別子フィールド ( ) にもインデックスを付けると、パフォーマンスが向上する可能性があります_tこの場合、mongo は両方のインデックスを交差させ、適切なタイプと両方を持つ項目のサブセットのみをスキャンします。parentFeatureSetId


重要な注意事項: C# ドライバーはDBFeature、クエリの作成中には使用しDBPointFeatureません。ドキュメントが明確に指定されている必要があることのみを使用します。ジェネリックAsQueryableは、使用を容易にするためだけに存在します。

于 2014-06-12T23:41:32.720 に答える