Рассмотрим два оператора для запроса массивов в 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, позволяя фильтровать документы по наличию или количеству элементов в массивах.