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 }