Wygląda na to, że interfejs Mongoose API obsługuje sortowanie według wypełnionych pól, ale jest błąd, który całkowicie je łamie: https://github.com/Automattic/mongoose/issues/2202 . Otrzymasz wynik, ale jest po prostu zły.
W przypadku niewielkich ilości danych można posortować tablicę wyników za pomocą JavaScript Tablica.prototyp.sort() . Pamiętaj jednak, że to bezpośrednio modyfikuje posortowaną tablicę.
To, co zrobiłem w tym przypadku, to dodanie właściwości klucza sortowania do schematu modelu, który chcesz posortować. Na przykład możesz zrobić:
var FollowActionSchema = new Schema({
// ...
'brandSortKey': { type: String },
'brand': {
type: ObjectId,
ref: 'Brand'
},
// ...
});
To nie jest idealne, ponieważ musisz samodzielnie ustawić tę właściwość z poprawnym kluczem:
var FollowAction = Model('FollowAction', FollowActionSchema);
var aBrand = // some brand object
var f = new FollowAction({
brand: aBrand._id,
brandSortKey: aBrand.name
// other properties
});
Ale wtedy możesz sortować bezpośrednio przez Mongoose API (lub MongoDB):
FollowAction.find({})
.sort({ brandSortKey:1 })
.exec(function (err, sortedResults) {
// do something with sorted results.
});