Eine Projektionsabfrage ist eine Abfrage, bei der Sie angeben, welche Felder zurückgegeben werden sollen.
In MongoDB, wenn Sie eine Sammlung mit db.collection.find()
abfragen -Methode können Sie angeben, welche Felder zurückgegeben werden sollen.
Sie können dies tun, indem Sie die Feldnamen in Ihre Abfrage aufnehmen und eine 1
hinzufügen oder 0
daneben, um anzugeben, ob es zurückgegeben werden soll oder nicht. Dies ist eine Projektion Parameter. Ein Projektionsparameter von 1
zeigt das Feld und eine 0
an wird es verstecken.
Beispiel
Lassen Sie uns zuerst eine Abfrage ohne durchführen Projektion (damit wir sehen können, wie viele Felder zurückgegeben werden):
Ohne Projektion
db.musicians.find( { instrument: "Vocals"} )
Ergebnis:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Mit Projektion
Lassen Sie uns nun die Projektion verwenden, um nur den Namen anzuzeigen Feld:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } )
Ergebnis:
{ "_id" : 1, "name" : "Ian Gillan" } { "_id" : 6, "name" : "Jeff Martin" }
Sie werden feststellen, dass die _id
Feld automatisch eingeschlossen, auch wenn Sie es nicht angeben. Sie können dieses Feld ausschließen, indem Sie eine 0
verwenden dagegen:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )
Ergebnis:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin" }
Einschlüsse und Ausschlüsse mischen
Sie können 1
nicht mischen s und 0
s (mit Ausnahme der _id
Feld). Wenn Sie versuchen, Einschlüsse und Ausschlüsse zu mischen, gehen Sie wie folgt vor:
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )
Sie erhalten am Ende diesen Fehler:
Error: error: { "waitedMS" : NumberLong(0), "ok" : 0, "errmsg" : "Projection cannot have a mix of inclusion and exclusion.", "code" : 2 }
Sie können also entweder Felder einschließen oder ausschließen – nicht beides.
Hier ist ein Beispiel für die Angabe von Feldern durch Ausschluss:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )
Ergebnis:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin", "born" : 1969 }