Linux で MongoDB v.2.4.4-pre- を実行しています。次のような要素を持つコレクションがあります。
{
num: 1,
arr: [
{
a: 'a1',
b: 'b1'
},
{
a: 'a2',
b: 'b2'
}
]
}
「numVal」と「arrVal」の 2 つの値もあります。「numVal」は数値で、「arrVal」は文字列の配列です。
タスクは、すべての要素を選択することです。ここで、"num" == "numVal" であり、各 "arr" 要素の "a" プロパティは、同じインデックスを持つ "arrVal" 要素と同じです。
たとえば、上記の要素を取得するには、"numVal" = 1 および "arrVal" = ['a1', 'a2'] が必要です。
正しいリクエストを作成するのを手伝ってもらえますか? 「$where」セレクターに基づく解決策がありますが、もっと良い方法があると思います。
現在のクエリは次のようになります。
db.collection.find({ num: 1, $where: "this.arr.length == 2 && this.arr[0] && this.arr[0].a == 'a1' && this.arr[1] && this.arr[1].a == 'a2'" })
また
db.collection.find({ num: 1, 'arr.a': { $all: [ 'a1', 'a2' ] }, arr: { $size: 2 }, $where: "this.arr[0].a == 'a1' && this.arr[1].a == 'a2'" })
ほとんどの場合、「$where」でフィルタリングされるアイテムの数は 1 または 2 で、最大数量は 20 近くです。
PS DB を再編成できません。