Запрос к вложенным данным
В этом шаге вы научитесь запрашивать вложенные документы и массивы в MongoDB. Мы рассмотрим различные методы фильтрации и извлечения конкретных вложенных данных.
Сначала сбросим нашу базу данных с некоторыми примерами данных для демонстрации запросов:
mongosh
Переключимся на базу данных bookstore:
use bookstore
Вставим несколько книг со вложенными структурами:
db.books.insertMany([
{
title: "MongoDB Essentials",
author: {
name: "John Doe",
experience: { years: 5, specialization: "Database Design" }
},
tags: ["beginner", "database", "nosql"],
chapters: [
{ number: 1, title: "Introduction", pages: 25 },
{ number: 2, title: "Advanced Concepts", pages: 45 }
]
},
{
title: "Advanced Database Techniques",
author: {
name: "Jane Smith",
experience: { years: 8, specialization: "Distributed Systems" }
},
tags: ["advanced", "distributed", "nosql"],
chapters: [
{ number: 1, title: "System Design", pages: 35 },
{ number: 2, title: "Performance Optimization", pages: 55 }
]
}
])
Запросить книгу по вложенному полю:
db.books.find({ "author.name": "John Doe" })
Запрос с использованием точной нотации для вложенных объектов:
db.books.find({ "author.experience.specialization": "Database Design" })
Запрос с использованием массива содержит:
db.books.find({ tags: "nosql" })
Запросить вложенные элементы массива:
db.books.find({ "chapters.pages": { $gt: 40 } })
Оператор $gt
означает "больше", поэтому этот запрос находит книги с главами длинее 40 страниц.
Сложный запрос, комбинирующий условия вложенного объекта и массива:
db.books.find({
"author.experience.years": { $gte: 5 },
tags: "advanced"
})
Этот запрос находит книги авторов с 5 и более годами опыта и помеченными как "advanced".