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.