O MongoDB fornece algumas maneiras de classificar documentos em uma ordem específica. Cada um deles nos permite ordenar os documentos em ordem crescente ou decrescente.
Há também a opção de ordenar os resultados de um
$text search – ordenação pelo textScore calculado metadados em ordem decrescente. Aqui estão 3 maneiras de classificar documentos no MongoDB.
O cursor.sort() Método
O
cursor.sort() especifica a ordem na qual a consulta retorna os documentos correspondentes. Suponha que tenhamos uma coleção chamada
employees com os seguintes documentos:{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 } Aqui está um exemplo de como retornar esses documentos classificados por seu
salary campo em ordem crescente e também seu _id campo:db.employees.find().sort( { salary: 1, _id: 1 } ) Resultado:
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } Aqui, usamos
1 para ordem crescente. Se quiséssemos em ordem decrescente, simplesmente usaríamos -1 em vez de. O motivo pelo qual incluí o
_id campo no pedido é porque, se dois ou mais funcionários têm o mesmo salário, então o _id campo pode ser usado para classificar esses documentos entre si. Embora isso possa parecer trivial, impedirá o MongoDB de retornar esses documentos em uma ordem diferente cada vez que executarmos a consulta.
Você também pode classificar os resultados de um
$text procurar. Veja MongoDB sort() Por exemplo. O $sort Estágio do pipeline de agregação
Ao usar a estrutura de pipeline de agregação, você pode usar o
$sort estágio para classificar todos os documentos de entrada e devolvê-los ao pipeline em ordem classificada. Veja como podemos usar
$sort para retornar o mesmo resultado do exemplo anterior. Exceto, vamos classificá-los em decrescente peça desta vez:db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
) Resultado:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 } Você também pode classificar os resultados de um
$text procurar. Veja MongoDB $sort Por exemplo. O $orderBy Modificador de consulta
O
$orderBy modificador de consulta pode ser usado em uma das duas formas. Assim:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } ) Ou assim::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } ) O
$orderBy modificador de consulta foi preterido no mongo shell desde a v3.2, mas decidi incluí-lo aqui mesmo assim. Consulte a documentação do MongoDB para obter mais informações.