MongoDB Операторы запросов
В этой главе мы обсудим, как использовать операторы запросов в MongoDB.
В MongoDB операторы запросов используются для фильтрации, сравнения и выполнения логических операций при запросе документов.
Эти операторы можно разделить на следующие категории: операторы сравнения, логические операторы, операторы элементов, операторы массивов и другие часто используемые операторы.
Операторы сравнения
Операторы сравнения:
| Operator | Описание | Пример |
|---|---|---|
$eq | equals | { age: { $eq: 25 } } |
$ne | не равно | { age: { $ne: 25 } } |
$gt | знак больше | { age: { $gt: 25 } } |
$gte | больше или равно | { age: { $gte: 25 } } |
$lt | знак меньше | { age: { $lt: 25 } } |
$lte | меньше или равно | { age: { $lte: 25 } } |
$in | входит в указанный массив | { age: { $in: [25, 30, 35] } } |
$nin | не входит в указанный массив | { age: { $nin: [25, 30, 35] } } |
$eq (равно)
Синтаксис:
{ field: { $eq: value } }
Найти людей, чей возраст равен 25:
db.collection.find({ age: { $eq: 25 } })
$ne (не равно)
Синтаксис:
{ field: { $ne: value } }
Найти людей, чей возраст не равен 25:
db.collection.find({ age: { $ne: 25 } })
$gt (больше чем)
Синтаксис:
{ field: { $gt: value } }
Найдите людей, чей возраст больше 25:
db.collection.find({ age: { $gt: 25 } })
$gte (больше или равно)
Синтаксис:
{ field: { $gte: value } }
Найдите людей, чей возраст больше или равен 25:
db.collection.find({ age: { $gte: 25 } })
$lt (меньше чем)
Синтаксис: { field: { $lt: value } }Найдите людей, чей возраст меньше 25:
db.collection.find({ age: { $lt: 25 } })
$lte (меньше или равно)
Синтаксис:
{ field: { $lte: value } }
Найдите людей, чей возраст меньше или равен 25:
db.collection.find({ age: { $lte: 25 } })
$in (значение находится в массиве)
Синтаксис:
{ field: { $in: [value1, value2, ...] } }
Найдите людей, чей возраст — один из 20, 25 и 30:
db.collection.find({ age: { $in: [20, 25, 30] } })
$nin (значение не находится в массиве)
Синтаксис:
{ field: { $nin: [value1, value2, ...] } }
Найти людей, чей возраст не является одним из 20, 25 и 30:
db.collection.find({ age: { $nin: [20, 25, 30] } })
Логические операторы
Логические операторы:
| Operator | Описание | Пример |
|---|---|---|
$and | Логическое И, удовлетворяет всем условиям | { $and: [ { age: { $gt: 25 } }, { city: "New York" } ] } |
$or | Логическое ИЛИ, удовлетворяет любому условию | { $or: [ { age: { $lt: 25 } }, { city: "New York" } ] } |
$not | Отрицание, не удовлетворяет условию | { age: { $not: { $gt: 25 } } } |
$nor | Логическое ИЛИ-НЕ, не удовлетворяет ни одному из условий | { $nor: [ { age: { $gt: 25 } }, { city: "New York" } ] } |
$and (все условия выполняются)
Синтаксис:
{ $and: [ { condition1 }, { condition2 } ] }
Найти людей, чей возраст больше 25 и меньше 35:
db.collection.find({ $and: [{ age: { $gt: 25 } }, { age: { $lt: 35 } }] })
$or (выполняется хотя бы одно условие)
Синтаксис:
{ $or: [ { condition1 }, { condition2 } ] }
Найти людей, чей возраст больше 25 или меньше 18:
db.collection.find({ $or: [{ age: { $gt: 25 } }, { age: { $lt: 18 } }] })
$not (отрицает условие)
Синтаксис:
{ field: { $not: { condition } } }
Найти людей, чей возраст не больше 25:
db.collection.find({ age: { $not: { $gt: 25 } } })
$nor (ни одно из условий не выполняется)
Синтаксис:
{ $nor: [ { condition1 }, { condition2 } ] }
Найдите людей, чей возраст не больше 25 и не меньше 18:
db.collection.find({ $nor: [{ age: { $gt: 25 } }, { age: { $lt: 18 } }] })
Операторы элементов
Операторы элементов:
| Operator | Описание | Пример |
|---|---|---|
$exists | существует ли поле | { age: { $exists: true } } |
$type | тип BSON поля | { age: { $type: "int" } } |
$exists (поле существует)
Синтаксис:
{ field: { $exists: boolean } }
Найдите документы, содержащие поле age:
db.collection.find({ age: { $exists: true } })
$type (тип поля)
Синтаксис:
{ field: { $type: "type" } }
Найдите документы, в которых поле age имеет целочисленный тип:
db.collection.find({ age: { $type: "int" } })
Операторы массивов
Операторы массивов:
| Operator | Описание | Пример |
|---|---|---|
$all | Массив содержит все указанные элементы | { tags: { $all: ["red", "blue"] } } |
$elemMatch | Элементы массива соответствуют указанным условиям | { results: { $elemMatch: { score: { $gt: 80, $lt: 85 } } } } |
$size | Длина массива равна указанному значению | { tags: { $size: 3 } } |
Найти документы, массив tags которых содержит "red" и "blue":
db.myCollection.find({ tags: { $all: ["red", "blue"] } });
$all (массив содержит все указанные элементы)
Синтаксис:
{ field: { $all: [value1, value2, ...] } }Найти документы, массив tags которых содержит "mongodb" и "database":
db.collection.find({ tags: { $all: ["mongodb", "database"] } })
$elemMatch (хотя бы один элемент массива удовлетворяет условию)
Синтаксис:{ field: { $elemMatch: { condition } } }
Найти элементы в массиве items, у которых quantity больше 10:
db.collection.find({ items: { $elemMatch: { quantity: { $gt: 10 } } } })
$size (размер массива)
Синтаксис:
{ field: { $size: value } }
Найти документы, где массив tags имеет размер 3:
db.collection.find({ tags: { $size: 3 } })
Другие операторы
Ниже приведены некоторые другие операторы:
| Operator | Описание | Пример |
|---|---|---|
$regex | Соответствует регулярному выражению | { name: { $regex: /^A/ } } |
$text | Выполняет текстовый поиск | { $text: { $search: "coffee" } } |
$where | Использует выражения JavaScript для условной фильтрации | { $where: "this.age > 25" } |
| $near | Найти документы рядом с указанной точкой | db.collection.find({ location: { $near: [10, 20], $maxDistance: 1000 } }) |
| $geoWithin | Найти документы в пределах указанной географической области | db.collection.find({ location: { $geoWithin: { $centerSphere: [[10, 20], 1] } } }) |
$regex (совпадение по регулярному выражению)
Синтаксис:
{ field: { $regex: "pattern" } }Найти документы, где name начинается с "John":
db.collection.find({ name: { $regex: /^John/ } })$near (документы рядом с указанной точкой)
Синтаксис:
{ field: { $near: [longitude, latitude], $maxDistance: distance } }
Найти документы рядом с определённым местоположением:
db.collection.find({ location: { $near: [10, 20], $maxDistance: 1000 } })
$geoWithin (найти документы в пределах указанной области)
Синтаксис:
{ field: { $geoWithin: { $centerSphere: [[longitude, latitude], radius] } } }
Найти документы в пределах указанной географической области:
db.collection.find({ location: { $geoWithin: { $centerSphere: [[10, 20], 1] } } }) Другие расширения