У меня есть документы, аналогичные этому:
{_ id: 1, значения: [2,3,4]}
{_ id: 2, значения: [4]}
{_ id: 3, значения: [3,4,5,6,7,8,9,10,11]}
, в котором каждый документ имеет массив. Мне нужен запрос, который возвращает документ, только если КАЖДЫЙ элемент его массива соответствует желаемым критериям (а не если ЛЮБОЙ элемент соответствует).
Например. что-то вроде (но не)
{'values': {'$ gt': 1, '$ lt': 5}})
, который успешно вернул бы первые два, но не третий документ, как не все
элементы «значений» массива третьего документа соответствуют критериям.
Очевидно, что mongodb использует неявное ИЛИ в запросах к массивам, тогда как мне нужно AND.
Полагаю, я мог бы вручную индексировать каждый элемент, например .:
collection.find ({values.0: {$ gt: 1, $ lt: 5}, values.1: {$ gt: 1, $ lt: 5}, ... values.n: {$ gt : 1, $ lt: 5}}) но это проблема с моими высокодинамичными массивами.
Есть ли лучший способ?
Примечание: я спрашивал об этом у пользователя mongodb, но, будучи новичком в mongodb, вызвал путаницу с оператором $ all. Здесь я обеспокоен массивом документов, а не массивом запросов. Кроме того, в этом числовом случае я понимаю, что можно написать запрос, который отрицает требуемый диапазон, но в целом я не смогу написать отрицание.