# Значения-массивы в MongoDB

Поля документов коллекции могут своими значениями иметь массивы. Давайте посмотрим на примере. Пусть у нас есть коллекция с юзерами, для каждого юзера содержащая его имя, массив любимых цветов и массив любимых чисел:

`[ { "name": "user1", "color": ["red"], "numbers": [1, 2, 3, 7] }, { "name": "user2", "color": ["black", "red", "blue"], "numbers": [3, 5, 9] }, { "name": "user3", "color": ["red", "green", "yellow"], "numbers": [1, 8, 9] }, ]`

Давайте посмотрим, какие в MongoDB есть операторы для работы с такими полями в виде массивов.

## Оператор $all

Оператор `$all` выбирает документы, в которых значения поля это - массив, который содержит все указанные элементы:

`let cond = {color: {$all: ['red', 'green']}}; let res = await prods.find(cond).toArray(); console.log(res);`

## Оператор $size

Оператор `$size` выбирает документы, в которых переданное поле содержит массив указанного размера. Давайте, например выберем юзеров, у которых три любимых цвета:

`let cond = {color: {$size: 3}}; let res = await prods.find(cond).toArray(); console.log(res);`

## Оператор $elemMatch

Оператор `$elemMatch` выбирает документы, в которых поле содержит массив, и в этом массиве есть хотя бы один элемент, удовлетворяющий запросу.

Давайте для примера выберем всех юзеров, у которых есть хотя бы одно любимое число, попадающее в заданный диапазон:

`let cond = {numbers: {$elemMatch: {$gt: 3, $lt: 7}}}; let res = await prods.find(cond).toArray(); console.log(res);`

## Практические задачи

Создайте следующую коллекцию `clothes` с одеждой:

`[ { "name": "cloth1", "sizes": [1, 2], "colors": ["black", "blue"] }, { "name": "cloth2", "sizes": [1, 2, 3], "colors": ["black", "white"] }, { "name": "cloth3", "sizes": [2, 3, 4], "colors": ["green", "blue"] }, { "name": "cloth4", "sizes": [4, 5, 6], "colors": ["black", "blue", "green"] }, ];`

Получите продукты, у которых три цвета.

Получите продукты, размер которых содержит значение из диапазона от `3` до `5`.

← →
↑