MongoDB – Exibindo apenas alguns campos: Find + Projection
- Postado por Adriano Bonacin
- Categorias mongodb
- Data 13/01/2022
- Comentários 0 comentário
Fala pessoal. Seguindo com nossos artigos sobre MongoDB. Vamos falar de queries com projection. A ideia não é ficar muito tempo falando de queries, porém precisamos de uma noção para conseguir desenrolar o dia a dia. Se você perdeu o último artigo, talvez seja uma boa ideia começar por lá.
PROJECTION
Para quem não conhece o termo projection, trata-se de trocarmos o nosso “select *” por “select col1, col2”, mostrando apenas algumas colunas no resultado. No nosso método find ele ocupa o segundo parâmetro e também precisa ser um doc. Aqui basicamente dizemos quais campos mostramos ({“field”: 1}) e quais escondemos ({“field”: 0}). E tudo isso independe do primeiro parâmetro.
Comecemos pelo exemplo do último artigo. Carros da FIAT modelo 2020.
yadax> db.cars.find({"marca": "FIAT","ano_modelo": 2020})
[
{
_id: ObjectId("61d76829222d2ee4efa32ee2"),
marca: 'FIAT',
modelo: 'TORO',
ano_fabricacao: 2020,
ano_modelo: 2020,
cor: 'Preto',
preco: 90000
},
{
_id: ObjectId("61d76829222d2ee4efa32ee3"),
marca: 'FIAT',
modelo: 'TORO',
ano_fabricacao: 2019,
ano_modelo: 2020,
cor: 'Prata',
preco: 80000
}
]
yadax>
O caso mais clássico é não querermos ver o “_id”, normalmente ele não tem valor de negócio e é um ID gerado automaticamente pelo MongoDB. Para removê-lo informamos {“_id”:0} e note como o resultado fica mais limpo.
yadax> db.cars.find({"marca": "FIAT","ano_modelo": 2020},{"_id": 0})
[
{
marca: 'FIAT',
modelo: 'TORO',
ano_fabricacao: 2020,
ano_modelo: 2020,
cor: 'Preto',
preco: 90000
},
{
marca: 'FIAT',
modelo: 'TORO',
ano_fabricacao: 2019,
ano_modelo: 2020,
cor: 'Prata',
preco: 80000
}
]
yadax>
Se quisermos esconder também o preço:
yadax> db.cars.find({"marca": "FIAT","ano_modelo": 2020},{"_id": 0, "preco": 0})
[
{
marca: 'FIAT',
modelo: 'TORO',
ano_fabricacao: 2020,
ano_modelo: 2020,
cor: 'Preto'
},
{
marca: 'FIAT',
modelo: 'TORO',
ano_fabricacao: 2019,
ano_modelo: 2020,
cor: 'Prata'
}
]
Um ponto a observar é que se escolhermos mostrar um campo, os outros (com excessão do _id) serão automaticamente escondidos. O _id sempre precisa ser escondido explicitamente. Veja:
yadax> db.cars.find({"marca": "FIAT","ano_modelo": 2020},{"marca":1, "modelo": 1})
[
{
_id: ObjectId("61d76829222d2ee4efa32ee2"),
marca: 'FIAT',
modelo: 'TORO'
},
{
_id: ObjectId("61d76829222d2ee4efa32ee3"),
marca: 'FIAT',
modelo: 'TORO'
}
]
Mostrando apenas marca, modelo e ano de fabricação. Note o escondemos o _id explicitamente.
yadax> db.cars.find({},{"_id": 0, "marca":1, "modelo": 1, "ano_fabricacao": 1})
[
{ marca: 'HONDA', modelo: 'CIVIC', ano_fabricacao: 2015 },
{ marca: 'HONDA', modelo: 'Civic', ano_fabricacao: 2018 },
{ marca: 'HONDA', modelo: 'FIT', ano_fabricacao: 2019 },
{ marca: 'FIAT', modelo: 'UNO', ano_fabricacao: 2000 },
{ marca: 'FIAT', modelo: 'PALIO', ano_fabricacao: 2006 },
{ marca: 'FIAT', modelo: 'STRADA', ano_fabricacao: 2018 },
{ marca: 'FIAT', modelo: 'TORO', ano_fabricacao: 2020 },
{ marca: 'FIAT', modelo: 'TORO', ano_fabricacao: 2019 },
{ marca: 'VW', modelo: 'GOL', ano_fabricacao: 2012 },
{ marca: 'VW', modelo: 'POLO', ano_fabricacao: 2020 },
{ marca: 'VW', modelo: 'GOLF', ano_fabricacao: 2019 },
{ marca: 'VW', modelo: 'GOL', ano_fabricacao: 2003 },
{ marca: 'FORD', modelo: 'FIESTA', ano_fabricacao: 2005 },
{ marca: 'FORD', modelo: 'FIESTA', ano_fabricacao: 2007 },
{ marca: 'FORD', modelo: 'PAMPA', ano_fabricacao: 1989 }
]
yadax>
Era isso que tínhamos para falar de projection. Vejo você na próxima.
Tag:mongodb