Я запускаю MongoDB v.2.4.4-pre-под Linux. Существует коллекция с элементами, как это:Сложный запрос MongoDB (высокий уровень вложенности)
{
num: 1,
arr: [
{
a: 'a1',
b: 'b1'
},
{
a: 'a2',
b: 'b2'
}
]
}
У меня тоже 2 значения: «numVal» и «arrVal». «numVal» - это число, а «arrVal» - это массив строк.
Задача состоит в том, чтобы выделить все элементы, где «num» == «numVal» и «a» свойство каждого элемента «arr» равно элементу «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'" })
Количество элементов, фильтруется "$, где" в большинстве случаев было бы 1 или 2, максимальное количество составляет около 20.
PS Я не могу реорганизовать свою БД.