UPDATE: Questa risposta sembra essere fuori moda; sembra che l'ordinamento personalizzato possa essere più o meno raggiunto utilizzando $project
function of the aggregation pipeline per trasformare i documenti di input prima dell'ordinamento. Vedi anche la risposta di @ Ari.
Non credo che questo sia possibile direttamente; il sort documentation non menziona certamente alcun modo per fornire una funzione di confronto personalizzata.
Probabilmente stai meglio nel genere nel client, ma se sei davvero determinato a farlo sul server potresti essere in grado di usare db.eval()
per organizzare l'ordinamento sul server (se il tuo cliente lo supporta).
lato server sorta:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
Versus l'equivalente sul lato client sorta:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
Si noti che è anche possibile ordinare tramite un aggregation pipeline e dal $orderby
operator (vale a dire, oltre a .sort()
) tuttavia nessuno di questi modi consente di fornire una funzione di ordinamento personalizzata.
sto correndo lo stesso problema. Sei riuscito a trovare un modo per farlo sul lato server? Preferirei non doverlo fare sul client o aggiungere il campo aggiuntivo. –