Ответ 1
ОБНОВЛЕНИЕ: Этот ответ кажется устаревшим; кажется, что пользовательская сортировка может быть более или менее достигнута с помощью функции $project
конвейера агрегации для преобразования входных документов перед сортировкой, См. Также ответ @Ari.
Я не думаю, что это возможно напрямую; сортировка документации, конечно, не упоминает о каком-либо способе предоставления пользовательской функции сравнения.
Вы, вероятно, лучше всего выполняете сортировку в клиенте, но если вы действительно настроены сделать это на сервере, вы можете использовать db.eval()
для организации запуска сортировки на сервере (если ваш клиент поддерживает его).
Сортировка на стороне сервера:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
В сравнении с эквивалентной клиентской сортировкой:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
Обратите внимание, что также можно сортировать по конвейеру и $orderby
(т.е. в дополнение к .sort()
), однако ни один из этих способов не позволяет вам предоставлять собственную функцию сортировки.