De Mongoose API lijkt het sorteren op ingevulde velden te ondersteunen, maar er is een bug die het volledig verbreekt: https://github.com/Automattic/mongoose/issues/2202 . Je krijgt een resultaat, maar het is gewoon verkeerd.
Voor kleine hoeveelheden gegevens is het prima om de resultatenarray te sorteren met Javascript Array.prototype.sort() . Houd er echter rekening mee dat dit de gesorteerde array rechtstreeks wijzigt.
Wat ik in dit geval heb gedaan, is een sorteersleuteleigenschap toevoegen aan het schema voor het model dat u wilt sorteren. Voor jouw voorbeeld zou je het volgende kunnen doen:
var FollowActionSchema = new Schema({
// ...
'brandSortKey': { type: String },
'brand': {
type: ObjectId,
ref: 'Brand'
},
// ...
});
Dit is niet perfect, omdat je deze eigenschap zelf expliciet met de juiste sleutel moet instellen:
var FollowAction = Model('FollowAction', FollowActionSchema);
var aBrand = // some brand object
var f = new FollowAction({
brand: aBrand._id,
brandSortKey: aBrand.name
// other properties
});
Maar dan kun je direct sorteren via de Mongoose API (of MongoDB):
FollowAction.find({})
.sort({ brandSortKey:1 })
.exec(function (err, sortedResults) {
// do something with sorted results.
});