In MongoDB die db.collection.find()
Methode wählt Dokumente in einer Sammlung oder Ansicht aus und gibt einen Cursor zu den ausgewählten Dokumenten zurück..
Die collection
part ist der Name der zu durchsuchenden Sammlung oder Ansicht.
Sie können es verwenden, um alle Dokumente, nur einige oder nur ein Dokument zurückzugeben. Sie können auch angeben, welche Felder zurückgegeben werden sollen.
Es ist wichtig zu beachten, dass die Dokumente nicht wirklich zurückgegeben werden. Es gibt lediglich einen Cursor zurück zu den Dokumenten. Allerdings ist es einfacher zu sagen, dass es „Dokumente zurückgibt“, und es wird normalerweise so bezeichnet – auch in diesem Artikel 🙂
Alle Dokumente zurücksenden
Hier ist ein Beispiel zur Veranschaulichung.
db.pets.find()
Ergebnis:
{ "_id" :1, "name" :"Wag", "type" :"Hund", "weight" :20 }{ "_id" :2, "name" :"Bark", "type" :„Hund“, „Gewicht“ :10 }{ „_id“ :3, „Name“ :„Miau“, „Typ“ :„Katze“, „Gewicht“ :7 }{ „_id“ :4, „Name“ :„Scratch“, „type“ :„Cat“, „weight“ :8 }{ „_id“ :5, „name“ :„Bruce“, „type“ :„Bat“, „weight“ :3 }Hier verwenden wir
find()
-Methode, um alle Dokumente auspets
zurückzugeben Sammlung. Wir wissen, dass dies alle Dokumente zurückgibt, da wir keine Filterkriterien angegeben haben. Tatsächlich haben wir keine Argumente geliefert.Wenn ohne Argumente aufgerufen,
find()
gibt alle Dokumente aus einer Sammlung zurück und gibt alle Felder für die Dokumente zurück.Eine andere Möglichkeit, das Obige zu tun, ist wie folgt:
db.pets.find({})
In diesem Fall übergeben wir ein leeres Dokument.
Durch Hinzufügen zu diesem leeren Dokument können wir mit dem Filtern der Ergebnisse beginnen.
Ergebnisse filtern
Die eigentliche Syntax von
find()
geht so:db.collection.find(query, projection)
Das bedeutet, dass Sie als erstes Argument eine Abfrage und als zweites eine Projektion übergeben können.
Wenn Sie eine Abfrage übergeben, wird diese zum Filtern der Ergebnisse verwendet. Eine Abfrage ist ein Dokument, das Abfrageoperatoren enthält. Wie wir im vorherigen Beispiel gesehen haben, gibt ein leeres Dokument alle Dokumente zurück.
Lassen Sie uns die Ergebnisse auf eine Teilmenge von Dokumenten in der Sammlung eingrenzen.
db.pets.find({"type":"Dog"})
Ergebnis:
{ "_id" :1, "name" :"Wag", "type" :"Hund", "weight" :20 }{ "_id" :2, "name" :"Bark", "type" :„Hund“, „Gewicht“ :10 }Dadurch wurden die Ergebnisse auf nur die Dokumente eingegrenzt, die einen
type
haben Feld mit dem WertDog
.In diesem Fall haben wir einfach ein Dokument als Filterkriterium übergeben.
Sie können auch Abfrageoperatoren verwenden. Diese ermöglichen es Ihnen, spezifischere Kriterien auf Ihre Abfrage anzuwenden.
Beispiel:
db.pets.find({"weight": { $lt: 10 }})
Ergebnis:
{ "_id" :3, "name" :"Miau", "type" :"Cat", "weight" :7 }{ "_id" :4, "name" :"Scratch", "type" :„Katze“, „Gewicht“ :8 }{ „_id“ :5, „Name“ :„Bruce“, „Typ“ :„Fledermaus“, „Gewicht“ :3 }Eingebettete Dokumente
Wenn Sie Dokumente haben, die eingebettete Dokumente enthalten, können Sie die folgenden Methoden verwenden, um Daten in den eingebetteten Dokumenten abzufragen.
- Punktnotation (z. B.
field.nestedfield: <value>
) - Verschachtelte Form (z. B. {
field: { nestedfield: <value> } }
). Beachten Sie, dass diese Option erst ab MongoDB 4.4 verfügbar ist.
Angenommen, wir fügen das folgende Dokument ein.
db.pets.insertOne({ "_id" :6, "name" :"Fetch", "type" :"Dog", "specs" :{ "height" :400, "weight" :15, " Farbe" :"braun" }})
Wir können die Punktnotation verwenden, um innerhalb des eingebetteten Dokuments abzufragen.
db.pets.find({ "specs.height": 400 })
Ergebnis:
{ "_id" :6, "name" :"Fetch", "type" :"Hund", "specs" :{ "height" :400, "weight" :15, "color" :"brown" } }
Die folgende Abfrage gibt dasselbe Dokument zurück, außer dass wir dieses Mal das eingebettete Dokument in verschachtelter Form referenzieren.
db.pets.find({
"specs" : {
"height" : 400,
"weight" : 15,
"color" : "brown"
}
})
Ergebnis:
{ "_id" :6, "name" :"Fetch", "type" :"Hund", "specs" :{ "height" :400, "weight" :15, "color" :"brown" } }
Bei Verwendung des verschachtelten Formulars muss die Abfrage genau mit dem gesamten eingebetteten Dokument übereinstimmen. Die folgende Abfrage stimmt beispielsweise nicht überein:
db.pets.find({
"specs" : {
"height" : 400
}
})
Formatieren Sie die Ergebnisse
Das Ergebnis des vorherigen Beispiels wurde in einer Zeile zurückgegeben. Sie können cursor.pretty()
verwenden Methode, um den Cursor so zu konfigurieren, dass die Ergebnisse in einem besser lesbaren Format angezeigt werden.
So verwenden Sie pretty()
-Methode an find()
anhängen Methode.
Beispiel:
db.pets.find({ "_id": 6 }).pretty()
Ergebnis:
{ "_id" :6, "name" :"Fetch", "type" :"Hund", "specs" :{ "height" :400, "weight" :15, "color" :"brown" }}
Arrays
Sie können Daten in Arrays referenzieren, indem Sie das Array-Element über seinen Index oder seinen Wert referenzieren.
Angenommen, wir fügen das folgende Dokument ein:
db.pets.insertOne({ "_id" :7, "name" :"Jake", "type" :"Dog", "awards" :[ "Top Dog", "Best Dog", "Größter Hund " ]})
Wenn wir alle Hunde mit der Top-Hund-Auszeichnung finden wollten, könnten wir die folgende Abfrage schreiben (die den obigen Hund zurückgibt).
db.pets.find({
"awards": "Top Dog"
}).pretty()
Ergebnis:
{ "_id" :7, "name" :"Jake", "type" :"Hund", "Auszeichnungen" :[ "Platzhirsch", "Bester Hund", "Größter Hund" ]}
Sie können den Elementindex auch wie folgt angeben:
db.pets.find({
"awards.0": "Top Dog"
}).pretty()
Dazu muss sich der angegebene Wert am angegebenen Index befinden. Daher gibt die folgende Abfrage nicht denselben Hund zurück.
db.pets.find({
"awards.1": "Top Dog"
}).pretty()
Beachten Sie, dass Arrays nullbasiert sind, sodass ein Index von 0 das erste Element angibt, 1 das zweite Element und so weiter.
Projektionen
Standardmäßig werden alle Dokumentfelder zurückgegeben, wenn Sie find()
verwenden . Sie können jedoch Projektionen verwenden, um die Anzahl der zurückgegebenen Felder bei Bedarf zu reduzieren.
Sie erinnern sich vielleicht, dass die Syntax für find()
geht so:
db.collection.find(query, projection)
Wobei query
liefert die Filterkriterien (die wir in den obigen Beispielen gemacht haben) und projection
ist eine optionale Projektion, die angibt, welche Felder von übereinstimmenden Dokumenten zurückgegeben werden sollen. Wenn wir also eine Projektion verwenden wollen, stellen wir sie einfach hinter die Abfrage.
Wenn Sie eine Projektion verwenden, können Sie die einzuschließenden Felder angeben , die Felder, die ausgeschlossen werden sollen , oder beides. Listen Sie dazu den Namen des Feldes und entweder eine 1
auf (um es einzuschließen) oder 0
(um es auszuschließen).
Mittlerweile umfasst unsere Sammlung folgende Dokumente:
{ "_id" :1, "name" :"Wag", "type" :"Hund", "weight" :20 }{ "_id" :2, "name" :"Bark", "type" :„Hund“, „Gewicht“ :10 }{ „_id“ :3, „Name“ :„Miau“, „Typ“ :„Katze“, „Gewicht“ :7 }{ „_id“ :4, „Name“ :„Scratch“, „type“ :„Cat“, „weight“ :8 }{ „_id“ :5, „name“ :„Bruce“, „type“ :„Bat“, „weight“ :3 }{ „ _id“ :6, „name“ :„Fetch“, „type“ :„Dog“, „specs“ :{ „height“ :400, „weight“ :15, „color“ :„brown“ } }{ „_id " :7, "name" :"Jake", "type" :"Hund", "Auszeichnungen" :[ "Platzhirsch", "Bester Hund", "Größter Hund" ] }
Hier ist ein Beispiel für die Verwendung einer Projektion zur Angabe der einzuschließenden Felder:
db.pets.find({}, { name: 1, type: 1 })
Ergebnis:
{ "_id" :1, "name" :"Wag", "type" :"Hund" }{ "_id" :2, "name" :"Bark", "type" :"Hund" }{ „_id“ :3, „name“ :„Meow“, „type“ :„Cat“ }{ „_id“ :4, „name“ :„Scratch“, „type“ :„Cat“ }{ „_id“ :5, „name“ :„Bruce“, „type“ :„Bat“ }{ „_id“ :6, „name“ :„Fetch“, „type“ :„Dog“ }{ „_id“ :7, „name " :"Jake", "type" :"Hund" }
Beachten Sie, dass die _id
Das Feld wird zurückgegeben, obwohl wir es nicht in unsere Projektion aufgenommen haben. Dieses Feld ist eine Ausnahme und standardmäßig enthalten.
Wenn Sie die _id
nicht möchten Feld zurückgegeben werden soll, müssen Sie es explizit ausschließen.
db.pets.find({}, { _id: 0, name: 1, type: 1 })
Ergebnis:
{ "name" :"Wag", "type" :"Dog" }{ "name" :"Bark", "type" :"Hund" }{ "name" :"Miau", "type" :„Katze“ }{ „Name“ :„Scratch“, „Typ“ :„Katze“ }{ „Name“ :„Bruce“, „Typ“ :„Fledermaus“ }{ „Name“ :„Fetch“, „Typ“ :„Hund“ }{ „Name“ :„Jake“, „Typ“ :„Hund“ }
Hier ist ein weiteres Beispiel, diesmal geben wir nur an, welche Felder ausgeschlossen werden sollen.
db.pets.find({}, { _id: 0, weight: 0, specs: 0, awards: 0 })
Ergebnis:
{ "name" :"Wag", "type" :"Dog" }{ "name" :"Bark", "type" :"Hund" }{ "name" :"Miau", "type" :„Katze“ }{ „Name“ :„Scratch“, „Typ“ :„Katze“ }{ „Name“ :„Bruce“, „Typ“ :„Fledermaus“ }{ „Name“ :„Fetch“, „Typ“ :„Hund“ }{ „Name“ :„Jake“, „Typ“ :„Hund“ }
Mehr Projektionen
Es gibt verschiedene andere Dinge, die Sie mit Projektionen tun können. Beispielsweise können Sie ab MongDB 4.4 Aggregatausdrücke verwenden, um den Wert eines projizierten Felds anzugeben.
Beispiel:
db.pets.find({}, {
"_id": 0,
"n": "$name",
"t": "$type",
"w": "$weight"
})
Ergebnis:
{ "n" :"Wag", "t" :"Hund", "w" :20 }{ "n" :"Bark", "t" :"Hund", "w" :10 }{ „n“ :„Miau“, „t“ :„Katze“, „w“ :7 }{ „n“ :„Kratz“, „t“ :„Katze“, „w“ :8 }{ „n“ :„Bruce“, „t“ :„Bat“, „w“ :3 }{ „n“ :„Fetch“, „t“ :„Hund“ }{ „n“ :„Jake“, „t“ :„Hund " }
Hier haben wir die Feldnamen umbenannt. Wir haben dies getan, indem wir für jedes Feld einen neuen Namen als String-Literal angegeben haben, und zwar unter Verwendung von $fieldName
Syntax, um diesen Feldwert auszugeben. Das Ergebnis ähnelt ein wenig der Verwendung von Aliasnamen in SQL.
Weitere Informationen
Weitere Informationen finden Sie in der MongoDB-Dokumentation.