Поля документов коллекции могут своими значениями иметь массивы. Давайте посмотрим на примере. Пусть у нас есть коллекция с юзерами, для каждого юзера содержащая массив языков, которые он знает:
[
{
"name": "user1",
"langs": ["english", "spanish"],
},
{
"name": "user2",
"langs": ["english", "german"],
},
{
"name": "user3",
"langs": ["german", "spanish"],
},
{
"name": "user4",
"langs": ["spanish", "english"],
},
{
"name": "user5",
"langs": ["german", "english", "spanish"],
},
]
Пример
Давайте найдем все документы,
у которых в массиве с языками
есть 'english'
:
let cond = {langs: 'english'};
let res = await coll.find(cond).toArray();
console.log(res);
Пример
Найдем теперь все документы,
у которых в массиве с языками
есть одновременно два языка,
'english'
и 'german'
:
let cond = {langs: ['english', 'german']};
let res = await coll.find(cond).toArray();
console.log(res);
Пример
Теперь выведем все документы, в которых
'english'
находится на первом месте
в массиве:
let cond = {'languages.0': "english"};
let res = await coll.find(cond).toArray();
console.log(res);
Практические задачи
Из приведенной коллекции получите всех юзеров, которые знают испанский.
Из приведенной коллекции получите всех юзеров, которые знают немецкий и испанский.
Из приведенной коллекции получите всех юзеров, у которых испанский является вторым элементом в массиве.