MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mangusta ordina per campo popolato

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.
   });