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.