MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB - Consultas de projeção


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 }