の構文に基づいて使用されていない: collection._ensureIndex({'c.d': 1});
MongoDBのインデックスがクエリ
{a: 'a1',
b: 'b1',
c: {
d: 'd1',
e: 'e1'
}
}
私は当初、このようなインデックスを作成しました
そして、 collection.find({c: {d: 'd1'})
のようにクエリを実行しました。これらは非常に遅く実行され、私がexplain()でデバッグしたとき、私は彼らがインデックスを使用していないことを認識しました。私はこのようなクエリを実行した場合
OTOHは、: collection.find({'c.d': 'd1'})
、その後、モンゴはインデックスを使用します。
サブ文書全体をインデックス化するようにインデックスを変更しました。つまり、collection._ensureIndex({c: 1})
です。最初のクエリがインデックスにヒットしました。
私の質問は、これはバグですか、機能ですか?私の印象は、JSONでは2つの表記が同等であり、非常に率直に言えば、2つのクエリ用語が同じフィールドを参照しており、適切なインデックスを使用していることを知るのに十分なデータベースがあると思います。
サブ文書全体のインデックスを作成する際の回避策は、最終的に索引を必要としないフィールドを多く含む可能性があり、必要のない時間とRAMを浪費するために最適ではないようです。
これはバグではない場合、Mongoにネストされたオブジェクトの構文を認識させ、インデックスを適切に使用させる方法がありますか?