1

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 を再編成できません。

4

1 に答える 1

1

次のクエリを正常に使用できます。

db.collection.find({ num: 1, arr: { $size: 2 }, 'arr.0.a': 'a1', 'arr.1.a': 'a2' })
于 2013-06-07T13:30:51.567 に答える