Соответствие позиции элемента
В этом шаге мы узнаем, как запросить массивы MongoDB, сопоставляя конкретные позиции элементов. MongoDB предоставляет мощные способы поиска элементов в точных местах внутри массива.
Сначала запустим MongoDB shell и убедимся, что используем нашу предыдущую базу данных:
mongosh
use arraylab
Создадим новую коллекцию с документами, которые имеют массивы, где позиция элементов имеет значение:
db.courses.insertMany([
{
name: "Базовый курс веб-разработки",
modules: ["HTML", "CSS", "JavaScript", "React", "Node.js"],
difficulty: ["новичок", "продвинутый", "эксперт"]
},
{
name: "Курс по Data Science",
modules: [
"Python",
"Статистика",
"Машинное обучение",
"Глубокое обучение",
"Искусственный интеллект"
],
difficulty: ["продвинутый", "эксперт", "профессионал"]
},
{
name: "Программа по кибербезопасности",
modules: [
"Безопасность сети",
"Этичный хакинг",
"Криптография",
"Тестирование проникновения",
"Реагирование на инциденты"
],
difficulty: ["продвинутый", "эксперт", "профессионал"]
}
]);
Теперь запросим документы, сопоставляя элементы в конкретных позициях массива:
// Найти курсы, где первый модуль - "HTML"
db.courses.find({ "modules.0": "HTML" });
// Найти курсы, где третий модуль - "JavaScript"
db.courses.find({ "modules.2": "JavaScript" });
// Найти курсы, где второй уровень сложности - "продвинутый"
db.courses.find({ "difficulty.1": "продвинутый" });
Пример вывода:
// Курсы с HTML в качестве первого модуля
[
{
_id: ObjectId("..."),
name: "Базовый курс веб-разработки",
modules: [ "HTML", "CSS", "JavaScript", "React", "Node.js" ],
difficulty: [ "новичок", "продвинутый", "эксперт" ]
}
]
// Курсы с JavaScript в качестве третьего модуля
[
{
_id: ObjectId("..."),
name: "Базовый курс веб-разработки",
modules: [ "HTML", "CSS", "JavaScript", "React", "Node.js" ],
difficulty: [ "новичок", "продвинутый", "эксперт" ]
}
]
// Курсы с "продвинутый" в качестве второго уровня сложности
[
{
_id: ObjectId("..."),
name: "Курс по Data Science",
modules: [ "Python", "Статистика", "Машинное обучение", "Глубокое обучение", "Искусственный интеллект" ],
difficulty: [ "продвинутый", "эксперт", "профессионал" ]
},
{
_id: ObjectId("..."),
name: "Программа по кибербезопасности",
modules: [ "Безопасность сети", "Этичный хакинг", "Криптография", "Тестирование проникновения", "Реагирование на инциденты" ],
difficulty: [ "продвинутый", "эксперт", "профессионал" ]
}
]
Вы также можете комбинировать запросы по позиции с другими условиями:
// Найти курсы, где первый модуль - "HTML" и второй уровень сложности - "продвинутый"
db.courses.find({
"modules.0": "HTML",
"difficulty.1": "продвинутый"
});