A API do Mongoose parece oferecer suporte à classificação em campos preenchidos, mas há um bug que a quebra completamente: https://github.com/Automattic/mongoose/issues/2202 . Você obtém um resultado, mas é simplesmente errado.
Para pequenas quantidades de dados, não há problema em classificar a matriz de resultados usando Javascript Array.prototype.sort() . Tenha em mente que isso modifica diretamente a matriz classificada.
O que fiz neste caso foi adicionar uma propriedade de chave de classificação ao esquema para o modelo que você deseja classificar. Para o seu exemplo, você poderia fazer:
var FollowActionSchema = new Schema({
// ...
'brandSortKey': { type: String },
'brand': {
type: ObjectId,
ref: 'Brand'
},
// ...
});
Isso não é perfeito, porque você mesmo terá que definir explicitamente essa propriedade com a chave correta:
var FollowAction = Model('FollowAction', FollowActionSchema);
var aBrand = // some brand object
var f = new FollowAction({
brand: aBrand._id,
brandSortKey: aBrand.name
// other properties
});
Mas você pode classificar diretamente pela API do Mongoose (ou MongoDB):
FollowAction.find({})
.sort({ brandSortKey:1 })
.exec(function (err, sortedResults) {
// do something with sorted results.
});