HOWTO · MongoDB
Wählen Sie einzelne oder mehrere Felder für alle Dokumente in einer MongoDB-Sammlung aus
In diesem MongoDB-Tutorial-Artikel erfahren Sie, wie Sie einzelne oder mehrere Felder für alle in einer MongoDB-Sammlung angegebenen Dokumente auswählen, indem Sie grundlegende Abfragevorgänge durch Projektion ausführen, die zurückzugebende Felder angibt oder einschränkt.
Auf dieser Seite
Um Felder aus MongoDB-Dokumenten auszuwählen, übergeben Sie ein Projektionsdokument als zweites Argument an find(). Verwenden Sie für jedes einzuschließende Feld den Wert 1. Fügen Sie bei Bedarf _id: 0 hinzu, um das Feld auszublenden, das MongoDB standardmäßig einbezieht.
Felder in einer MongoDB-Sammlung mit einer Projektion auswählen
Eine Projektion legt fest, welche Felder MongoDB für jedes passende Dokument zurückgibt. Das erste Argument von find() ist der Filter, das zweite die Projektion. Ein leerer Filter, {}, stimmt mit jedem Dokument in der Sammlung überein.
Für ein praktisches Beispiel verbinden Sie mongosh mit einem MongoDB-Server und fügen Sie einige Dokumente in die Sammlung teams ein. Diese Befehle verwenden die wörtlichen Feldnamen team, position und points. Es handelt sich um Syntaxbeispiele; sie wurden hier nicht ausgeführt:
db.teams.insertMany([{ team: "Manchester City", position: "1st", points: 70 }, { team: "Liverpool", position: "2nd", points: 69 }, { team: "Chelsea", position: "3rd", points: 59 }]) Wenn Sie diesen Einfügebefehl erneut ausführen, wird ein weiterer Satz Dokumente hinzugefügt. Verwenden Sie daher eine leere Sammlung, wenn Sie das Beispiel wiederholen möchten.
Um alle Felder der eingefügten Dokumente anzuzeigen, führen Sie db.teams.find({}) aus. Die Shell zeigt die passenden Dokumente einschließlich ihrer generierten _id-Werte an. Beispielhaftes Ergebnis (zur Veranschaulichung; die ObjectId-Werte variieren): { _id: ObjectId("<generated id>"), team: "Manchester City", position: "1st", points: 70 }, { _id: ObjectId("<generated id>"), team: "Liverpool", position: "2nd", points: 69 }, { _id: ObjectId("<generated id>"), team: "Chelsea", position: "3rd", points: 59 }. Die folgenden Beispiele verwenden dieselbe Sammlung und geben Felder aus diesen Dokumenten zurück.
Bestimmte Felder einschließen und _id ausschließen
Setzen Sie ein Feld in der Projektion auf 1, um es einzuschließen. Beispielsweise gibt db.teams.find({}, { team: 1 }) für jedes passende Dokument das Feld team zurück und schließt außerdem standardmäßig _id ein. Beispielhaftes Ergebnis (zur Veranschaulichung; die ObjectId-Werte variieren): { _id: ObjectId("<generated id>"), team: "Manchester City" }, { _id: ObjectId("<generated id>"), team: "Liverpool" }, { _id: ObjectId("<generated id>"), team: "Chelsea" }. Die Projektion benennt das Feld nicht um: Sein Bezeichner in der Datenbank bleibt team.
Um team ohne den Bezeichner zurückzugeben, fügen Sie _id: 0 hinzu: db.teams.find({}, { team: 1, _id: 0 }). Beispielhaftes Ergebnis: { team: "Manchester City" }, { team: "Liverpool" }, { team: "Chelsea" }. MongoDB erlaubt, _id auszuschließen und gleichzeitig andere Felder einzuschließen. Das ist die Ausnahme von der allgemeinen Projektionsregel: Bei gewöhnlichen Feldern kann eine Projektion Einschluss und Ausschluss nicht mischen. Kombinieren Sie beispielsweise nicht team: 1 mit points: 0; führen Sie stattdessen die einzuschließenden Felder auf.
Um mehrere Felder einzuschließen und _id auszublenden, verwenden Sie db.teams.find({}, { team: 1, points: 1, _id: 0 }). Jedes zurückgegebene Dokument enthält team und points. Beispielhaftes Ergebnis: { team: "Manchester City", points: 70 }, { team: "Liverpool", points: 69 }, { team: "Chelsea", points: 59 }. Wenn Sie den Bezeichner zusammen mit diesen Feldern einschließen möchten, lassen Sie _id aus der Projektion weg oder setzen Sie es auf _id: 1.
Die Abfrage mit find() gibt einen Cursor mit den passenden Dokumenten zurück, den mongosh interaktiv anzeigt. Eine Projektion ändert die Felder in jedem zurückgegebenen Dokument; sie begrenzt nicht die Anzahl der passenden Dokumente. Fügen Sie Filterkriterien als erstes Argument hinzu, wenn Sie neben der Feldauswahl auch die zurückgegebenen Dokumente einschränken möchten.
Zusammenfassung
Übergeben Sie eine Projektion als zweites Argument an find() und verwenden Sie 1, um ein oder mehrere Felder einzuschließen. MongoDB schließt _id standardmäßig ein; fügen Sie _id: 0 hinzu, wenn Sie es ausblenden möchten. Eine Einschlussprojektion darf _id ausschließen. Ansonsten sollte eine Projektion entweder im Einschluss- oder im Ausschlussmodus bleiben.