L'API Mongoose sembra supportare l'ordinamento sui campi popolati, ma c'è un bug che lo interrompe completamente: https://github.com/Automatic/mongoose/issues/2202 . Ottieni un risultato, ma è semplicemente sbagliato.
Per piccole quantità di dati, è possibile ordinare l'array dei risultati utilizzando Javascript Array.prototype.sort() . Tieni presente che questo modifica direttamente l'array ordinato.
Quello che ho fatto in questo caso è aggiungere una proprietà della chiave di ordinamento allo schema per il modello che vuoi ordinare. Per il tuo esempio, potresti fare:
var FollowActionSchema = new Schema({
// ...
'brandSortKey': { type: String },
'brand': {
type: ObjectId,
ref: 'Brand'
},
// ...
});
Questo non è perfetto, perché dovrai impostare esplicitamente questa proprietà con la chiave corretta da solo:
var FollowAction = Model('FollowAction', FollowActionSchema);
var aBrand = // some brand object
var f = new FollowAction({
brand: aBrand._id,
brandSortKey: aBrand.name
// other properties
});
Ma puoi ordinare direttamente tramite l'API Mongoose (o MongoDB):
FollowAction.find({})
.sort({ brandSortKey:1 })
.exec(function (err, sortedResults) {
// do something with sorted results.
});