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 }