Совпадение в диапазоне двух полей из массива значений

У меня есть массив чисел [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 являются неявными условиями И, если не указано иное.

Другие вопросы по тегам