MongoDB Операторы запросов

В этой главе мы обсудим, как использовать операторы запросов в MongoDB.

В MongoDB операторы запросов используются для фильтрации, сравнения и выполнения логических операций при запросе документов.

Эти операторы можно разделить на следующие категории: операторы сравнения, логические операторы, операторы элементов, операторы массивов и другие часто используемые операторы.

Операторы сравнения

Операторы сравнения:

OperatorОписаниеПример
$eqequals{ 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] } } })
Другие расширения