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

3 maneiras de classificar documentos no MongoDB


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.