AKTUALIZACJA: Ta odpowiedź wydaje się nieaktualna; wygląda na to, że niestandardowe sortowanie można w mniejszym lub większym stopniu osiągnąć za pomocą $project
funkcja potoku agregacji w celu przekształcenia dokumentów wejściowych przed sortowaniem. Zobacz także odpowiedź @Ari.
Nie sądzę, że jest to możliwe bezpośrednio; dokumentacja sort z pewnością nie wspomina o żadnym sposobie dostarczenia niestandardowej funkcji porównania.
Prawdopodobnie najlepiej zrobisz to w kliencie, ale jeśli naprawdę chcesz to zrobić na serwerze, możesz użyć db.eval()
zorganizować uruchomienie sortowania na serwerze (jeśli Twój klient to obsługuje).
Sortowanie po stronie serwera:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
W porównaniu z równoważnym sortowaniem po stronie klienta:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
Zauważ, że możliwe jest również sortowanie za pomocą potoku agregacji i według $orderby
operator (tj. oprócz .sort()
), jednak żaden z tych sposobów nie pozwala również na zapewnienie niestandardowej funkcji sortowania.