Une requête de projection est une requête dans laquelle vous spécifiez quels champs doivent être renvoyés.
Dans MongoDB, lorsque vous interrogez une collection à l'aide de db.collection.find()
méthode, vous pouvez spécifier les champs que vous souhaitez voir renvoyés.
Vous pouvez le faire en incluant les noms de champs dans votre requête et en ajoutant un 1
ou 0
à côté d'eux, pour préciser s'il doit être rendu ou non. Ceci est une projection paramètre. Un paramètre de projection de 1
affichera le champ et un 0
le cachera.
Exemple
Faisons d'abord une requête sans projection (afin que nous puissions voir combien de champs sont renvoyés) :
Sans projection
db.musicians.find( { instrument: "Vocals"} )
Résultat :
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Avec projection
Maintenant, utilisons la projection pour afficher uniquement le nom champ :
db.musicians.find( { instrument: "Vocals" }, { name: 1 } )
Résultat :
{ "_id" : 1, "name" : "Ian Gillan" } { "_id" : 6, "name" : "Jeff Martin" }
Vous remarquerez que le _id
est automatiquement inclus, même si vous ne le spécifiez pas. Vous pouvez exclure ce champ en utilisant un 0
contre elle :
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )
Résultat :
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin" }
Mélanger les inclusions et les exclusions
Vous ne pouvez pas mélanger 1
s et 0
s (à l'exception du _id
domaine). Si vous essayez de mélanger les inclusions et les exclusions, comme ceci :
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )
Vous vous retrouverez avec cette erreur :
Error: error: { "waitedMS" : NumberLong(0), "ok" : 0, "errmsg" : "Projection cannot have a mix of inclusion and exclusion.", "code" : 2 }
Donc, soit vous incluez des champs, soit vous les excluez, pas les deux.
Voici un exemple de spécification de champs par exclusion :
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )
Résultat :
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin", "born" : 1969 }