Оглавление
- Поиск по массиву
- Поиск оценки
- Полезные ссылки
Поиск по массиву
Что такое массив?
Это возможность поиска информации в массивах, которые находятся внутри документов, мы можем делать это с помощью логических операторов и операторов сравнения, но для этой задачи существуют специальные операторы, о которых мы поговорим ниже.
Какие?
Согласно официальной документации, существует три оператора, выполняющих поиск внутри массивов: $all
, $elemMatch
и $size
. О каждом из них будет рассказано чуть ниже.
Синтаксис
Поскольку это оператор, основной синтаксис такой же, как и у других операторов, с той лишь разницей, что мы всегда будем извлекать значение из массива, поэтому каждое поле, которое мы хотим отфильтровать, должно быть массивом.
В параметре фильтра мы объявляем оператор и значения, которые он должен получить. Каждый оператор принимает значение в разном формате.
{ <campo>: { <operador>: <valor> } }
$all
- Функция: возвращает все Документы, в которых искомое поле является массивом со всеми значениями, определенными в фильтре, независимо от того, больше ли элементов или их порядок отличается.
{ foods: { $all: ["burger", "fries"] } }
# retorna todos os Documentos que possuam burger e fries no campo "foods"
Вернуться к началу
$elemMatch
- Функция: возвращает все Документы, в которых искомое поле является массивом с хотя бы одним значением, удовлетворяющим условию, заданному в фильтре.
{ sales: { $elemMatch: { $gt: 40, $lt: 80 }} }
# retorna todos os Documentos que possuam ao menos um valor maior que 40 e menor que 80 no campo "sales"
Вернуться к началу
$size
- Функция: возвращает все Документы, в которых искомое поле является массивом с заданным размером.
{ tags: { $size: 4 } }
# retorna todos os Documentos que possuam exatamente 4 elementos dentro do campo "tags"
# não é possível buscar utilizar o $size junto de Operadores de Comparação,
# por exemplo: um array com MAIS DE dois elementos
Вернуться к началу
Поиск оценки
Что такое оценочный поиск?
Evaluation Query — это вольный перевод Evaluation Query Operators, который в упрощенном виде состоит из операторов, которые будут «оценивать» определенное поле в соответствии с требуемыми правилами.
Эта оценка может быть внутренней между двумя или более полями одного Документа, или внешней, как операторы, рассмотренные ранее.
Что такое операторы?
Всего существует шесть операторов запроса оценки, но здесь мы рассмотрим только операторы: expr
, $regex
и $mod
.
Синтаксис
Каждый оператор Evaluation Query Operators имеет совершенно особый синтаксис, поэтому мы объясним синтаксис каждого из них в отдельности.
$expr
-
Функция: позволяет сравнивать два поля одного и того же Документа, это сравнение строится на основе других операторов, таких как сравнение или логический.
-
Синтаксис: мы объявляем оператор
$expr
, затем создаем необходимую валидацию и, наконец, указываем поля для сравнения через массив, эти поля должны получить$
, как и операторы.
{ $expr: { $gt: ["$credit", "$debit"] } }
# retorna todos os Documentos em que o campo "credit" seja maior que "debit"
Вернуться к началу
$regex
-
Функция: позволяет осуществлять поиск текста с помощью REGEX.
-
Синтаксис: мы объявляем поле, по которому хотим выполнить поиск, затем используем оператор
$regex
с REGEX для проверки.
{ title: { $regex: /Lord/i } }
# retorna todos os Documentos em que o campo "title" seja válido pela REGEX /lord/i
Вернуться к началу
$mod
-
Функция: возвращает все Документы, в которых выбранное поле, разделенное на объявленное значение, дает ожидаемый модуль.
-
Синтаксис: мы объявляем поле, которое хотим проверить, затем используем оператор
$mod
и через массив объявляем делитель и ожидаемый модуль соответственно.
{ qty: { $mod: [2, 0] } }
# retorna todos os Documentos em que o campo "qty" dividido por 2, tenha um módulo igual a 0
Вернуться к началу
Полезные ссылки
- Операторы запросов к массивам
- Запрос массива встроенных документов
- Операторы оценочных запросов
- Оператор
$text