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 }