Запрос mongodb для сопоставления каждого элемента в массиве документов с условием

У меня есть документы, аналогичные этому:

{_ id: 1, values: [2,3,4]}

{_ id: 2, values: [4 ]}

{_ id: 3, values: [3,4,5,6,7,8,9,10,11]}

, в которых каждый документ имеет массив. Мне нужен запрос, который возвращает документ, только если КАЖДЫЙ элемент его массива соответствует желаемым критериям (а не если соответствует ЛЮБОЙ элемент).

Например. что-то вроде (но не)

{'values': {'$ gt': 1, '$ lt': 5}})

, который успешно вернет первые два, но не третий документ, так как не все элементы массива значений третьего документа соответствуют критериям.

Очевидно, mongodb использует неявное ИЛИ в запросах к массивам, тогда как мне нужно И.

Думаю, я мог бы вручную проиндексировать каждый элемент, например :[12240 impressioncollection.find({values.0: {$ gt: 1, $ lt: 5}, values.1: {$ gt: 1, $ lt: 5}, ... values.n: {$ gt: 1, $ lt: 5}}), но это неприятно для моих высокодинамичных массивов.

Есть ли способ лучше?

Примечание: я спросил об этом в mongodb-user, но, будучи новичком в mongodb, вызвал путаницу с оператором $ all. Здесь меня беспокоит массив документов, а не массив запросов. Кроме того, в этом числовом случае я понимаю, что можно написать запрос, который отрицает желаемый диапазон, но в целом я не смогу написать отрицание.

5
задан ricopan 18 May 2011 в 01:04
поделиться