Попробую объяснить подробнее.
Приходит запрос с формы поиска, например такой:
...?name=John&min_age=18&max_age=35 (найти всех пользователей по имени Джон в возрасте от 18 до 25 лет).
или такой:
...?min_age=18 (найти всех пользователей в возрасте от 18).
Естественно, какой набор условий для поиска придет с формы - предсказать невозможно. А хотелось бы выполнить поиск одним запросом к базе. И если конкретные значения еще можно проверять на наличие и, если они пустые, удалять их из объекта поиска, то как быть с условиями больше чем, меньше чем и т.д.? Можно конечно в запросе к базе подставлять значения заведомо далекие от реальных значений (например мах_age=1000), но мне кажется должен быть способ указать Монге, что какое-то поле может иметь любое значение.
Если одна из границ возраста не пришла, можно формировать так:
var minAge // Значение с формы
var maxAge // Значение с формы
var query = {
name: 'John',
age: {
$gt: minAge == undefined ? -1000 : minAge,
$lt: maxAge == undefined ? 1000 : maxAge,
}
}
Users.find( query ).limit(20);
В данной реализации используется конкретные максимально и минимально возможные значения.
Sahnen, Если хотите вообще исключить из запроса $gt или $lt в зависимости от параметров, то как вариант можно так (в данном примере показана лишь суть, можно оптимизировать):
var ageQuery = {}
if(minAge) ageQuery['$gt'] = minAge
if(maxAge) ageQuery['$lt'] = maxAge
var query = {
name: 'John'
}
if(Object.keys(ageQuery).length > 0) query.age = ageQuery // Проверка, есть ли в ageQuery какие-либо свойства
Users.find( query ).limit(20);