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

Classificação complexa do Mongo?


ATUALIZAÇÃO: Esta resposta parece estar desatualizada; parece que a classificação personalizada pode ser mais ou menos alcançada usando o $project função do pipeline de agregação para transformar os documentos de entrada antes da classificação. Veja também a resposta de @Ari.

Eu não acho que isso seja possível diretamente; a documentação de classificação certamente não menciona nenhuma maneira de fornecer uma função de comparação personalizada.

Provavelmente é melhor fazer a classificação no cliente, mas se você estiver realmente determinado a fazê-lo no servidor, poderá usar db.eval() para organizar a execução da classificação no servidor (se o seu cliente suportar).

Classificação do lado do servidor:
db.eval(function() { 
  return db.scratch.find().toArray().sort(function(doc1, doc2) { 
    return doc1.a - doc2.a 
  }) 
});

Contra a classificação equivalente do lado do cliente:
db.scratch.find().toArray().sort(function(doc1, doc2) { 
  return doc1.a - doc2.b 
});

Observe que também é possível classificar por meio de um pipeline de agregação e pelo $orderby operador (ou seja, além de .sort() ), no entanto, nenhuma dessas maneiras permite fornecer uma função de classificação personalizada.