sql >> Database >  >> NoSQL >> MongoDB

Mangoest sorteren op ingevuld veld

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


  1. proberen om gegevens in jade van mongodb weer te geven

  2. MongoDB verschil tussen $orderby en Sort

  3. Mongodb v4.0 Transactie, MongoError:Transactienummers zijn alleen toegestaan ​​op een replicasetlid of mongo's

  4. verschil tussen aggregaat ($ match) en vinden, in MongoDB?