Совпадение в диапазоне двух полей из массива значений
У меня есть массив чисел [111, 444, 777]
Я хочу заглянуть внутрь этих 2 документов
{
_id: 1,
lookHere: {rangeLow: 333, rangeHigh: 555}
},
{
_id: 2,
lookHere: {rangeLow: 222, rangeHigh: 333}
}
Я хочу написать запрос, который возвращает только 1-й документ, поскольку мой массив чисел включает 444, что составляет от 333 до 555.
Есть ли запрос, который может достичь этого результата в Монго / Мангуста?
1 ответ
Решение
Вы хотите $or
запрос. Вы можете .map()
исходный массив в аргументы для $or
:
var inputs = [111, 444, 777];
collection.find({
"$or": inputs.map( n => ({
"lookHere.rangeLow": { "$lt": n },
"lookHere.rangeHigh": { "$gt": n }
}) )
})
В основном это делается для того, чтобы увидеть, меньше ли значение Low, а High больше, чем каждый из текущих элементов, и возвращает значение true, когда любое из них соответствует обоим этим условиям.
Обратите внимание, что все аргументы запроса MongoDB являются неявными условиями И, если не указано иное.