UPPDATERING: Detta svar verkar vara inaktuellt; det verkar som att anpassad sortering mer eller mindre kan uppnås genom att använda $project
aggregeringspipelinens funktion för att transformera indatadokumenten före sortering. Se även @Aris svar.
Jag tror inte att detta är möjligt direkt; sorteringsdokumentationen nämner verkligen inte något sätt att tillhandahålla en anpassad jämförelsefunktion.
Du är förmodligen bäst av att göra sorteringen i klienten, men om du verkligen är fast besluten att göra det på servern kanske du kan använda db.eval()
för att ordna att sorteringen körs på servern (om din klient stöder det).
Sortering på serversidan:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
I motsats till motsvarande sortering på klientsidan:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
Observera att det också är möjligt att sortera via en aggregeringspipeline och efter $orderby
operator (dvs. förutom .sort()
) men inget av dessa sätt låter dig tillhandahålla en anpassad sorteringsfunktion heller.