PERBARUI: Jawaban ini tampaknya sudah ketinggalan zaman; tampaknya penyortiran khusus dapat lebih atau kurang dicapai dengan menggunakan $project
fungsi pipa agregasi untuk mengubah dokumen input sebelum penyortiran. Lihat juga jawaban @Ari.
Saya tidak berpikir ini mungkin secara langsung; dokumentasi sortir tentu saja tidak menyebutkan cara apa pun untuk menyediakan fungsi perbandingan khusus.
Anda mungkin sebaiknya melakukan pengurutan di klien, tetapi jika Anda benar-benar bertekad untuk melakukannya di server, Anda mungkin dapat menggunakan db.eval()
untuk mengatur untuk menjalankan pengurutan di server (jika klien Anda mendukungnya).
Sortir sisi server:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
Dibandingkan dengan pengurutan sisi klien yang setara:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
Perhatikan bahwa pengurutan juga dimungkinkan melalui jalur agregasi dan dengan $orderby
operator (yaitu selain .sort()
) namun tidak satu pun dari cara ini yang memungkinkan Anda menyediakan fungsi pengurutan khusus.