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 }