Eltern-Kind-Abfragen
In diesem Schritt werden wir fortgeschrittene Abfrageverfahren zur Abrufung von verwandten Dokumenten aus Eltern- und Kind-Sammlungen in MongoDB untersuchen. Wir werden demonstrieren, wie Sie effektiv verwandte Daten finden und verknüpfen.
Grundlegende Filterabfragen
Lassen Sie uns beginnen, indem wir Bücher von einem bestimmten Autor finden:
db.books.find({ author_id: ObjectId("author1") })
Filtern mit mehreren Bedingungen
Abfragen von Büchern mit mehreren Filtern:
db.books.find({
author_id: ObjectId("author1"),
published: { $gt: 1812 }
})
Diese Abfrage findet Bücher von Jane Austen, die nach 1812 veröffentlicht wurden.
Aggregationspipeline für komplexe Abfragen
Verwenden Sie das Aggregierungsframework, um Autor- und Buchinformationen zu verknüpfen:
db.books.aggregate([
{ $lookup: {
from: "authors",
localField: "author_id",
foreignField: "_id",
as: "author_details"
}},
{ $match: {
"author_details.nationality": "British"
}},
{ $project: {
title: 1,
published: 1,
"author_name": "$author_details.name"
}}
])
Beispielausgabe
[
{
_id: ObjectId(...),
title: 'Pride and Prejudice',
published: 1813,
author_name: ['Jane Austen']
},
{
_id: ObjectId(...),
title: 'Emma',
published: 1815,
author_name: ['Charles Dickens']
}
]
Sortieren und Begrenzen der Ergebnisse
Abfragen und Sortieren von Büchern nach Veröffentlichungsjahr:
db.books.find()
.sort({ published: 1 })
.limit(2)
Dies ruft die zwei frühesten veröffentlichten Bücher ab.
Fortgeschrittenes Filtern mit regulären Ausdrücken
Finden Sie Bücher mit Titeln, die bestimmte Wörter enthalten:
db.books.find({
title: { $regex: /Sense/, $options: 'i' }
})
Die Option $options: 'i'
macht die Suche unempfindlich auf Groß- und Kleinschreibung.
Zählen von verwandten Dokumenten
Zählen Sie die Bücher für jeden Autor:
db.books.aggregate([
{ $group: {
_id: "$author_id",
book_count: { $sum: 1 }
}},
{ $lookup: {
from: "authors",
localField: "_id",
foreignField: "_id",
as: "author_info"
}},
{ $project: {
author_name: "$author_info.name",
book_count: 1
}}
])
Beispielausgabe
[
{
_id: ObjectId("author1"),
author_name: ['Jane Austen'],
book_count: 2
},
{
_id: ObjectId("author2"),
author_name: ['Charles Dickens'],
book_count: 2
}
]