MongoDB: Запросы $all и $size для массивов

Рассмотрим два оператора для запроса массивов в MongoDB: $all и $size.

Оператор $all

Оператор $all принимает список значений и ищет массивы, содержащие все указанные значения. Массив может содержать дополнительные значения помимо указанных в списке.

Оператор $size

Оператор $size принимает числовое значение и ищет документы с массивом определенного размера (количества элементов).

Примеры

Пример 1: Оператор $all

Ищем документы, у которых массив tags содержит как минимум два тега: «ad» и «you». Оба значения («ad» и «you») должны присутствовать в массиве text.

db.collection.find({ text: { $all: ["ad", "you"] } })

Пример 2: Оператор $size

Ищем документы, у которых массив text содержит ровно четыре элемента.

db.collection.find({ text: { $size: 4 } })

Практическое применение

Оператор $all

Запрос на поиск в массиве text:

db.collection.find({ text: { $all: ["ID", "a"] } })

Результат: Найдены документы, содержащие в массиве text элементы «ID» и «a» (независимо от порядка).

Заменим «ID» на «vania»:

db.collection.find({ text: { $all: ["ad", "vania"] } })

Результат: Найдены документы, содержащие в массиве text элементы «ad» и «vania».

Оператор $size

Запрос на поиск массивов text с четырьмя элементами:

db.collection.find({ text: { $size: 4 } })

Результат: Найдены все документы, где массив text содержит ровно четыре элемента. В примере данных более 50 таких документов.

Массивы, содержащие документы

В примерах использовались массивы строк. Если массив содержит документы вместо строк или чисел, он называется массивом вложенных документов. Рассмотрение работы операторов с такими массивами будет в следующих видео.

Операторы $all и $size предоставляют эффективные средства для запроса данных в массивах MongoDB, позволяя фильтровать документы по наличию или количеству элементов в массивах.

Что будем искать? Например,программа