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

Mongoose sorteres efter befolket felt

Mongoose API ser ud til at understøtte sortering på udfyldte felter, men der er en fejl, der bryder det fuldstændigt: https://github.com/Automattic/mongoose/issues/2202 . Du får et resultat, men det er simpelthen forkert.

For små mængder data er det fint at sortere resultatarrayet ved hjælp af Javascript Array.prototype.sort() . Husk, at dette ændrer det sorterede array direkte.

Det, jeg har gjort i dette tilfælde, er at tilføje en sorteringsnøgleegenskab til skemaet for den model, du vil sortere. Som dit eksempel kan du gøre:

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

Dette er ikke perfekt, for du skal selv udtrykkeligt indstille denne egenskab med den korrekte nøgle:

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

var aBrand = // some brand object

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

Men så kan du sortere direkte via Mongoose API (eller MongoDB):

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


  1. Overvejelser for at administrere MongoDB

  2. 'TypeError:meme.find(...).forEach er ikke en funktion' i mongoose node js?

  3. Adgangselement i mongo array i java

  4. Mongodb 3.0 java insertOne