En projektionsfråga är en fråga där du anger vilka fält som ska returneras.
I MongoDB, när du frågar en samling med db.collection.find() metod kan du ange vilka fält du vill ha returnerat.
Du kan göra detta genom att inkludera fältnamnen i din fråga och lägga till en 1 eller 0 bredvid dem, för att ange om den ska returneras eller inte. Detta är en projektion parameter. En projektionsparameter för 1 kommer att visa fältet och en 0 kommer att dölja det.
Exempel
Låt oss först göra en fråga utan projektion (så att vi kan se hur många fält som returneras):
Utan 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
Låt oss nu använda projektion för att bara visa namnet fält:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } ) Resultat:
{ "_id" : 1, "name" : "Ian Gillan" }
{ "_id" : 6, "name" : "Jeff Martin" }
Du kommer att märka att _id fältet inkluderas automatiskt, även om du inte anger det. Du kan utesluta det här fältet genom att använda en 0 emot det:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } ) Resultat:
{ "name" : "Ian Gillan" }
{ "name" : "Jeff Martin" }
Blanda inneslutningar och undantag
Du kan inte blanda 1 s och 0 s (med undantag för _id fält). Om du försöker blanda inneslutningar och uteslutningar, så här:
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } ) Du kommer att få det här felet:
Error: error: {
"waitedMS" : NumberLong(0),
"ok" : 0,
"errmsg" : "Projection cannot have a mix of inclusion and exclusion.",
"code" : 2
}
Så att du antingen inkluderar fält eller exkluderar dem – inte båda.
Här är ett exempel på hur du anger fält genom uteslutning:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } ) Resultat:
{ "name" : "Ian Gillan" }
{ "name" : "Jeff Martin", "born" : 1969 }