sql >> Databasteknik >  >> NoSQL >> MongoDB

Mungo sorterar efter befolkat fält

Mongoose API verkar stödja sortering på fyllda fält, men det finns en bugg som bryter det helt: https://github.com/Automattic/mongoose/issues/2202 . Du får ett resultat, men det är helt enkelt fel.

För små mängder data går det bra att sortera resultatmatrisen med Javascript Array.prototype.sort() . Tänk på att detta direkt modifierar den sorterade arrayen.

Vad jag har gjort i det här fallet är att lägga till en sortsnyckelegenskap till schemat för modellen du vill sortera. Som ditt exempel kan du göra:

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

Det här är inte perfekt, eftersom du måste explicit ställa in den här egenskapen med rätt nyckel själv:

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

var aBrand = // some brand object

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

Men då kan du sortera direkt via Mongoose API (eller MongoDB):

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


  1. docker-compose wait-for.sh misslyckas för att vänta mongodb

  2. Autentisering med Spring Security + Spring data + MongoDB

  3. Få förfäder i MongoDb med hjälp av trädstruktur

  4. Räkna baserat på tillstånd och dividera med antal poster för tidsintervall