MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose sortiert nach ausgefülltem Feld

Die Mongoose-API scheint das Sortieren von ausgefüllten Feldern zu unterstützen, aber es gibt einen Fehler, der sie vollständig zerstört: https://github.com/Automattic/mongoose/issues/2202 . Sie erhalten ein Ergebnis, aber es ist einfach falsch.

Bei kleinen Datenmengen ist es in Ordnung, das Ergebnisarray mit Javascript zu sortieren Array.prototype.sort() . Beachten Sie jedoch, dass dies das sortierte Array direkt modifiziert.

In diesem Fall habe ich dem Schema für das Modell, das Sie sortieren möchten, eine Sortierschlüsseleigenschaft hinzugefügt. Für Ihr Beispiel könnten Sie Folgendes tun:

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

Dies ist nicht perfekt, da Sie diese Eigenschaft explizit mit dem richtigen Schlüssel selbst festlegen müssen:

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

var aBrand = // some brand object

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

Aber dann können Sie direkt über die Mongoose-API (oder MongoDB) sortieren:

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