АКТУАЛИЗИРАНЕ: Този отговор изглежда неактуален; изглежда, че персонализираното сортиране може повече или по-малко да бъде постигнато с помощта на $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()
) обаче нито един от тези начини не ви позволява да предоставите персонализирана функция за сортиране.