Чтение и операторы запроса
Как формулировать условия поиска: от простого равенства до составных логических фильтров.
Фильтр — это документ-условие, который вы передаёте в
find; MongoDB вернёт документы, ему удовлетворяющие.
Простое равенство
Самый базовый фильтр — пара «поле: значение». Найти всех из Казани:
db.users.find({ city: "Казань" })Можно комбинировать несколько полей — они соединяются по «И» неявно. Это «из Казани И возраст 28»:
db.users.find({ city: "Казань", age: 28 })Операторы сравнения
Для «больше/меньше» нужны операторы — они начинаются с $ и пишутся как вложенный объект у поля:
| Оператор | Смысл |
$eq | равно (то же, что просто значение) |
$ne | не равно |
$gt / $gte | больше / больше или равно |
$lt / $lte | меньше / меньше или равно |
$in | значение входит в список |
$nin | значение НЕ входит в список |
Пользователи старше 30 лет:
db.users.find({ age: { $gt: 30 } })Возраст в диапазоне 25..40 включительно — два оператора на одном поле:
db.users.find({ age: { $gte: 25, $lte: 40 } })$in — один из списка
Когда нужно «город — любой из нескольких», громоздкий $or заменяет компактный $in:
db.users.find({ city: { $in: ["Казань", "Сочи"] } })Логические $and и $or
Условия по разным полям и так соединяются по «И». Явный $and нужен редко — например, когда два условия на одно поле. А вот $or необходим, чтобы выразить «ИЛИ»: он принимает массив условий, и подходит документ, удовлетворяющий хотя бы одному:
db.users.find({
$or: [
{ city: "Москва" },
{ age: { $lt: 25 } }
]
})Это «из Москвы ИЛИ моложе 25». Можно вкладывать: общее условие снаружи, $or внутри — «из Казани И (моложе 25 ИЛИ старше 40)».
db.users.find({
city: "Казань",
$or: [ { age: { $lt: 25 } }, { age: { $gt: 40 } } ]
})Проверка наличия поля: $exists
Поскольку схема гибкая, у части документов поле может отсутствовать. Оператор $exists фильтрует по самому факту наличия поля:
db.users.find({ email: { $exists: true } }) // у кого есть email
db.users.find({ phone: { $exists: false } }) // у кого нет телефонаИтог
- Простой фильтр — «поле: значение»; несколько полей соединяются по «И» автоматически.
- Сравнения задают операторами
$gt,$lt,$gte,$lte,$ne;$inпроверяет вхождение в список. $orвыражает «ИЛИ»;$existsпроверяет наличие поля — это особенно полезно при гибкой схеме.