AKTUALIZACE: Tato odpověď se zdá být zastaralá; zdá se, že vlastního třídění lze víceméně dosáhnout pomocí $project
funkce agregačního kanálu pro transformaci vstupních dokumentů před tříděním. Viz také odpověď @Ari.
Nemyslím si, že je to možné přímo; dokumentace řazení rozhodně nezmiňuje žádný způsob, jak poskytnout vlastní porovnávací funkci.
Pravděpodobně nejlépe uděláte třídění v klientovi, ale pokud jste opravdu rozhodnuti to udělat na serveru, možná budete moci použít db.eval()
zařídit spuštění řazení na serveru (pokud to váš klient podporuje).
Řazení na straně serveru:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
Oproti ekvivalentnímu řazení na straně klienta:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
Všimněte si, že je také možné třídit pomocí agregačního kanálu a podle $orderby
operátor (tj. kromě .sort()
), ani jeden z těchto způsobů vám však neumožňuje poskytnout vlastní funkci řazení.