Interroger des documents avec des données imbriquées
L'interrogation est une opération fondamentale de base de données. Dans cette étape, vous apprendrez à interroger des documents en fonction de valeurs dans des objets et tableaux imbriqués. Pour nous assurer d'avoir un ensemble de données propre pour ces exemples, supprimez d'abord la collection books existante.
db.books.drop()
Maintenant, insérez quelques nouveaux documents avec différentes structures imbriquées pour pratiquer l'interrogation.
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 }
]
}
])
Pour trouver un livre par un champ dans un document imbriqué, utilisez la notation par points. Cette requête trouve le livre écrit par "John Doe".
db.books.find({ "author.name": "John Doe" })
Vous pouvez aller plus loin dans les structures imbriquées. Cette requête trouve les livres dont la spécialisation de l'auteur est "Database Design".
db.books.find({ "author.experience.specialization": "Database Design" })
Pour trouver des documents où un tableau contient une valeur spécifique, vous pouvez interroger directement le champ du tableau. Ceci trouve tous les livres tagués "nosql".
db.books.find({ tags: "nosql" })
Vous pouvez également rechercher des documents où un élément de tableau répond à une certaine condition. Cette requête trouve les livres qui ont au moins un chapitre de plus de 40 pages, en utilisant l'opérateur $gt (supérieur à).
db.books.find({ "chapters.pages": { $gt: 40 } })
Enfin, vous pouvez combiner plusieurs conditions. Cette requête trouve les livres tagués comme "advanced" écrits par un auteur ayant 5 ans d'expérience ou plus ($gte signifie supérieur ou égal à).
db.books.find({
"author.experience.years": { $gte: 5 },
tags: "advanced"
})