MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose trier par champ peuplé

L'API Mongoose semble prendre en charge le tri sur les champs remplis, mais il y a un bogue qui le casse complètement : https://github.com/Automattic/mongoose/issues/2202 . Vous obtenez un résultat, mais c'est tout simplement faux.

Pour de petites quantités de données, il est possible de trier le tableau de résultats à l'aide de Javascript Tableau.prototype.sort() . Gardez à l'esprit que cela modifie directement le tableau trié.

Dans ce cas, j'ai ajouté une propriété de clé de tri au schéma du modèle que vous souhaitez trier. Pour votre exemple, vous pourriez faire :

var FollowActionSchema = new Schema({
  // ...
  'brandSortKey': { type: String },
  'brand': {
    type: ObjectId,
    ref: 'Brand'
  },
  // ...
});

Ce n'est pas parfait, car vous devrez définir explicitement cette propriété avec la bonne clé vous-même :

var FollowAction = Model('FollowAction', FollowActionSchema);

var aBrand = // some brand object

var f = new FollowAction({
   brand: aBrand._id,
   brandSortKey: aBrand.name
   // other properties
}); 

Mais, vous pouvez ensuite trier directement via l'API Mongoose (ou MongoDB) :

FollowAction.find({})
   .sort({ brandSortKey:1 })
   .exec(function (err, sortedResults) {
       // do something with sorted results.
   });