Een projectiequery is een query waarin u specificeert welke velden moeten worden geretourneerd.
In MongoDB, wanneer u een verzameling opvraagt met behulp van de db.collection.find()
methode, kunt u aangeven welke velden u wilt teruggeven.
U kunt dit doen door de veldnamen in uw zoekopdracht op te nemen en een 1
. toe te voegen of 0
ernaast om aan te geven of het moet worden geretourneerd of niet. Dit is een projectie parameter. Een projectieparameter van 1
geeft het veld weer en een 0
zal het verbergen.
Voorbeeld
Laten we eerst een zoekopdracht uitvoeren zonder projectie (zodat we kunnen zien hoeveel velden worden geretourneerd):
Zonder projectie
db.musicians.find( { instrument: "Vocals"} )
Resultaat:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Met projectie
Laten we nu projectie gebruiken om alleen de naam . weer te geven veld:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } )
Resultaat:
{ "_id" : 1, "name" : "Ian Gillan" } { "_id" : 6, "name" : "Jeff Martin" }
U zult merken dat de _id
veld wordt automatisch opgenomen, zelfs als u het niet opgeeft. U kunt dit veld uitsluiten door een 0
. te gebruiken tegen:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )
Resultaat:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin" }
Inclusies en uitsluitingen mengen
Je kunt 1
niet combineren s en 0
s (met uitzondering van de _id
veld). Als u insluitsels en uitsluitingen probeert te combineren, gaat u als volgt te werk:
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )
Je krijgt deze foutmelding:
Error: error: { "waitedMS" : NumberLong(0), "ok" : 0, "errmsg" : "Projection cannot have a mix of inclusion and exclusion.", "code" : 2 }
Dus u kunt velden opnemen of uitsluiten - niet beide.
Hier is een voorbeeld van het specificeren van velden door uitsluiting:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )
Resultaat:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin", "born" : 1969 }