MongoDB – Ordenando documentos com método sort()
- Postado por Adriano Bonacin
- Categorias mongodb
- Data 13/01/2022
- Comentários 0 comentário
Passando para falar mais um pouquinho das queries no MongoDB. Vai ser bem rápido, prometo. A ideia é deixar registrado como podemos trazer nosso resultado ordenado usando o método sort(), partindo do resultado do nosso último artigo.
Esse foi o retorno:
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>
E se preferirmos ordernar por marca? Aposto que vocês já não terão mais muitas dificuldades.
O javascript possui funcões que operam depois de outras funções. Não vou me arriscar muito para explicar, mas é só a gente incluir um .sort() no final. O método sort() opera sobre um cursor, que é o retorno do método find().
Se você tentou aí, pode ter visto que não mudou nada. Além do .sort() precisamos informar as colunas que queremos ordenar (adivinhe: usando um doc). A documentação oficial pode ser acessada aqui.
Veja:
yadax> db.cars.find({},{"_id": 0, "marca":1, "modelo": 1, "ano_fabricacao": 1}).sort({"marca": 1})
[
{ 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: 'FORD', modelo: 'FIESTA', ano_fabricacao: 2005 },
{ marca: 'FORD', modelo: 'FIESTA', ano_fabricacao: 2007 },
{ marca: 'FORD', modelo: 'PAMPA', ano_fabricacao: 1989 },
{ marca: 'HONDA', modelo: 'CIVIC', ano_fabricacao: 2015 },
{ marca: 'HONDA', modelo: 'Civic', ano_fabricacao: 2018 },
{ marca: 'HONDA', modelo: 'FIT', 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 }
]
yadax>
E se precisarmos ordernar por marca e ano de fabricação?
yadax> db.cars.find({},{"_id": 0, "marca":1, "modelo": 1, "ano_fabricacao": 1}).sort({"marca": 1, "ano_fabricacao": 1 })
[
{ 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: 2019 },
{ marca: 'FIAT', modelo: 'TORO', ano_fabricacao: 2020 },
{ marca: 'FORD', modelo: 'PAMPA', ano_fabricacao: 1989 },
{ marca: 'FORD', modelo: 'FIESTA', ano_fabricacao: 2005 },
{ marca: 'FORD', modelo: 'FIESTA', ano_fabricacao: 2007 },
{ marca: 'HONDA', modelo: 'CIVIC', ano_fabricacao: 2015 },
{ marca: 'HONDA', modelo: 'Civic', ano_fabricacao: 2018 },
{ marca: 'HONDA', modelo: 'FIT', ano_fabricacao: 2019 },
{ marca: 'VW', modelo: 'GOL', ano_fabricacao: 2003 },
{ marca: 'VW', modelo: 'GOL', ano_fabricacao: 2012 },
{ marca: 'VW', modelo: 'GOLF', ano_fabricacao: 2019 },
{ marca: 'VW', modelo: 'POLO', ano_fabricacao: 2020 }
]
yadax>
Dá para trazer os mais novos primeiros?
yadax> db.cars.find({},{"_id": 0, "marca":1, "modelo": 1, "ano_fabricacao": 1}).sort({"marca": 1, "ano_fabricacao": -1 })
[
{ marca: 'FIAT', modelo: 'TORO', ano_fabricacao: 2020 },
{ marca: 'FIAT', modelo: 'TORO', ano_fabricacao: 2019 },
{ marca: 'FIAT', modelo: 'STRADA', ano_fabricacao: 2018 },
{ marca: 'FIAT', modelo: 'PALIO', ano_fabricacao: 2006 },
{ marca: 'FIAT', modelo: 'UNO', ano_fabricacao: 2000 },
{ marca: 'FORD', modelo: 'FIESTA', ano_fabricacao: 2007 },
{ marca: 'FORD', modelo: 'FIESTA', ano_fabricacao: 2005 },
{ marca: 'FORD', modelo: 'PAMPA', ano_fabricacao: 1989 },
{ marca: 'HONDA', modelo: 'FIT', ano_fabricacao: 2019 },
{ marca: 'HONDA', modelo: 'Civic', ano_fabricacao: 2018 },
{ marca: 'HONDA', modelo: 'CIVIC', ano_fabricacao: 2015 },
{ marca: 'VW', modelo: 'POLO', ano_fabricacao: 2020 },
{ marca: 'VW', modelo: 'GOLF', ano_fabricacao: 2019 },
{ marca: 'VW', modelo: 'GOL', ano_fabricacao: 2012 },
{ marca: 'VW', modelo: 'GOL', ano_fabricacao: 2003 }
]
yadax>
Resumindo, “field”: 1 faz a ordenação default, crescente. O “field”: -1 o faz decrescente.
Era isso. Por enquanto paramos de falar das queries e voltamos para a administração. Até a próxima.
Tag:mongodb