ОБНОВЛЕНИЕ: Этот ответ устарел; кажется, что пользовательская сортировка может быть более или менее достигнута с помощью функции $project
конвейера агрегации для преобразования входных документов перед сортировкой. Смотрите также ответ @ Ари.
Я не думаю, что это возможно напрямую; документация по сортировке определенно не упоминает какой-либо способ предоставления пользовательской функции сравнения.
Вероятно, вам лучше всего выполнить сортировку на клиенте, но если вы действительно решили сделать это на сервере, вы можете использовать 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()
), однако ни один из этих способов не позволяет вам предоставить пользовательская функция сортировки либо.