AGGIORNAMENTO: Questa risposta sembra essere obsoleta; sembra che l'ordinamento personalizzato possa essere ottenuto più o meno usando il $project
funzione della pipeline di aggregazione per trasformare i documenti di input prima dell'ordinamento. Vedi anche la risposta di @Ari.
Non penso che questo sia possibile direttamente; la documentazione di ordinamento certamente non menziona alcun modo per fornire una funzione di confronto personalizzata.
Probabilmente è meglio eseguire l'ordinamento nel client, ma se sei davvero determinato a farlo sul server potresti essere in grado di utilizzare db.eval()
per organizzare l'esecuzione dell'ordinamento sul server (se il client lo supporta).
Ordinamento lato server:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
Rispetto all'ordinamento lato client equivalente:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
Nota che è anche possibile ordinare tramite una pipeline di aggregazione e per $orderby
operatore (ovvero in aggiunta a .sort()
), tuttavia nessuno di questi metodi ti consente di fornire una funzione di ordinamento personalizzata.