配列の要素のインデックスが期待通りに機能しないことを保証します。より高速なクエリのために、MongoDBの配列の最初の要素のインデックスを保証するにはどうすればよいですか?
など。以下のデータ
> db.test.find()
{ "_id" : 7891236423, "arr" : [ "a", "b", "c" ] }
{ "_id" : 7891236424, "arr" : [ "b", "c", "d" ] }
{ "_id" : 7891236425, "arr" : [ "b", "c", "a" ] }
>
で予想通り何の指標
> db.test.find({"arr.0":"a"})
{ "_id" : 7891236423, "arr" : [ "a", "b", "c" ] }
>
が存在しない場合は、次のクエリは動作しますが、私はarr.0
> db.test.ensureIndex({"arr.0":1})
> db.test.find({"arr.0":"a"})
>
ここで何が起こっているのか分かりませんが、私の意見では、インデックスは返されたデータに影響しないはずです。それともすべきか?
これはバグですか?またはインデックス違反?私はこの動作の説明がうまくいくことを嬉しく思っています。また、単一の配列要素でどのようにインデックスを達成できるかについてのヒントもあります。
PS:にインデックスを作成してから、をクエリする前に、arr.0
をクエリすることができます。これは、この例の有効な回避策です。しかし、これは、arr.0
で大量のデータをソートする必要があるとすぐには役に立ちません(MongoDBはインデックスを要求します)。
使用しているMongoDBのバージョンは? – stbrody
1.8.5を使ってこの問題を再現できましたが、2.0.2ではうまくいくようです。 – stbrody