この「スキーマ」に続くコレクションがあります。
{
_id: ObjectId,
order: Number,
fieldA: ObjectId,
fieldB: Array[ObjectId]
}
そして、このように定義されたインデックス:
{
fieldA: 1,
fieldB: 1,
order: 1
}
このような検索クエリを実行する場合:
{
$and: [
{fieldA: {$in: [{"$oid":"592edae196232608d00f78f5"},{"$oid":"592edadc96232608d00f5614"}]}},
{fieldB: {$in:[{"$oid":"592edace96232608d00ef77f"},{"$oid":"592edacd96232608d00ef34b"}]}}
]
}
としてsort
定義された
{
order: 1
}
クエリは正常に実行され、インデックスはクエリをカバーし、説明計画は私を示しています:
- 4 IXSCAN
- 1 SORT_MERGE
- 1 フェッチ
問題: クエリを実行した場合fieldA
(fieldB
結合のような $in
ものを作成しようとしている)、インデックス作成が同じように動作せず、クエリがカバーされず、並べ替えがメモリ内で行われ、説明計画が表示されます。自分 :
- 1 イクススキャン
- 1 フェッチ
- 1 SORT_KEY_GENERATOR
- 1ソート
さらに悪いことに、このクエリを Mongoose から実行すると、並べ替え操作でメモリ不足になります:/