Uma consulta de projeção é uma consulta onde você especifica quais campos devem ser retornados.
No MongoDB, quando você consulta uma coleção usando o
db.collection.find()
método, você pode especificar quais campos você gostaria de ter retornado. Você pode fazer isso incluindo os nomes dos campos em sua consulta e adicionando um
1
ou 0
ao lado deles, para especificar se deve ser devolvido ou não. Esta é uma projeção parâmetro. Um parâmetro de projeção de 1
exibirá o campo e um 0
vai escondê-lo. Exemplo
Primeiro vamos fazer uma consulta sem projeção (para que possamos ver quantos campos são retornados):
Sem projeção
db.musicians.find( { instrument: "Vocals"} )
Resultado:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Com projeção
Agora, vamos usar a projeção para exibir apenas o nome campo:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } )
Resultado:
{ "_id" : 1, "name" : "Ian Gillan" } { "_id" : 6, "name" : "Jeff Martin" }
Você notará que o
_id
campo é incluído automaticamente, mesmo que você não o especifique. Você pode excluir este campo usando um 0
contra isso:db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )
Resultado:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin" }
Misturando inclusões e exclusões
Você não pode misturar
1
se 0
s (com exceção do _id
campo). Se você tentar misturar inclusões e exclusões, assim:db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )
Você vai acabar com este erro:
Error: error: { "waitedMS" : NumberLong(0), "ok" : 0, "errmsg" : "Projection cannot have a mix of inclusion and exclusion.", "code" : 2 }
Então, para você, inclua campos ou exclua-os – não ambos.
Veja um exemplo de especificação de campos por exclusão:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )
Resultado:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin", "born" : 1969 }