En projektionsforespørgsel er en forespørgsel, hvor du angiver, hvilke felter der skal returneres.
I MongoDB, når du forespørger en samling ved hjælp af db.collection.find()
metode, kan du angive, hvilke felter du gerne vil have returneret.
Du kan gøre dette ved at inkludere feltnavnene i din forespørgsel og tilføje en 1
eller 0
ved siden af dem, for at angive, om det skal returneres eller ej. Dette er en projektion parameter. En projektionsparameter på 1
vil vise feltet og en 0
vil skjule det.
Eksempel
Lad os først lave en forespørgsel uden projektion (så vi kan se, hvor mange felter der returneres):
Uden projektion
db.musicians.find( { instrument: "Vocals"} )
Resultat:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Med projektion
Lad os nu bruge projektion til kun at vise navnet felt:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } )
Resultat:
{ "_id" : 1, "name" : "Ian Gillan" } { "_id" : 6, "name" : "Jeff Martin" }
Du vil bemærke, at _id
felt medtages automatisk, selvom du ikke angiver det. Du kan ekskludere dette felt ved at bruge en 0
imod det:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )
Resultat:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin" }
Blanding af inklusioner og ekskluderinger
Du kan ikke blande 1
s og 0
s (med undtagelse af _id
Mark). Hvis du prøver at blande indeslutninger og ekskluderinger, sådan her:
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )
Du vil ende med denne fejl:
Error: error: { "waitedMS" : NumberLong(0), "ok" : 0, "errmsg" : "Projection cannot have a mix of inclusion and exclusion.", "code" : 2 }
Så du skal enten inkludere felter eller ekskludere dem - ikke begge dele.
Her er et eksempel på angivelse af felter ved ekskludering:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )
Resultat:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin", "born" : 1969 }