Dokumente mit verschachtelten Daten abfragen
Abfragen ist eine grundlegende Datenbankoperation. In diesem Schritt lernen Sie, wie Sie Dokumente basierend auf Werten in verschachtelten Objekten und Arrays abfragen. Um sicherzustellen, dass wir einen sauberen Datensatz für diese Beispiele haben, löschen Sie zuerst die vorhandene books-Collection.
db.books.drop()
Fügen Sie nun einige neue Dokumente mit unterschiedlichen verschachtelten Strukturen ein, um das Abfragen zu üben.
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 }
]
}
])
Um ein Buch anhand eines Feldes in einem verschachtelten Dokument zu finden, verwenden Sie die Punktnotation. Diese Abfrage findet das von "John Doe" geschriebene Buch.
db.books.find({ "author.name": "John Doe" })
Sie können tiefer in verschachtelte Strukturen eindringen. Diese Abfrage findet Bücher, bei denen die Spezialisierung des Autors "Database Design" ist.
db.books.find({ "author.experience.specialization": "Database Design" })
Um Dokumente zu finden, bei denen ein Array einen bestimmten Wert enthält, können Sie das Array-Feld direkt abfragen. Dies findet alle Bücher, die mit "nosql" getaggt sind.
db.books.find({ tags: "nosql" })
Sie können auch nach Dokumenten suchen, bei denen ein Array-Element eine bestimmte Bedingung erfüllt. Diese Abfrage findet Bücher, die mindestens ein Kapitel mit mehr als 40 Seiten haben, unter Verwendung des Operators $gt (größer als).
db.books.find({ "chapters.pages": { $gt: 40 } })
Schließlich können Sie mehrere Bedingungen kombinieren. Diese Abfrage findet Bücher, die als "advanced" getaggt sind und von einem Autor mit 5 oder mehr Jahren Erfahrung geschrieben wurden ($gte bedeutet größer oder gleich).
db.books.find({
"author.experience.years": { $gte: 5 },
tags: "advanced"
})