sql >> Databáze >  >> NoSQL >> MongoDB

Mongoose seřadit podle obsazeného pole

Zdá se, že rozhraní Mongoose API podporuje řazení na obsazených polích, ale je tu chyba, která jej zcela porušuje: https://github.com/Automattic/mongoose/issues/2202 . Dostanete výsledek, ale je to prostě špatně.

Pro malé množství dat je v pořádku třídit pole výsledků pomocí Javascriptu Array.prototype.sort() . Mějte však na paměti, že to přímo upravuje seřazené pole.

V tomto případě jsem přidal vlastnost klíče řazení do schématu pro model, který chcete seřadit. Pro váš příklad můžete udělat:

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

To není dokonalé, protože tuto vlastnost budete muset explicitně nastavit pomocí správného klíče sami:

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

var aBrand = // some brand object

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

Ale pak můžete třídit přímo přes Mongoose API (nebo MongoDB):

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


  1. MongoDB + nodejs:jak se dotazovat na pole ISODate?

  2. Jak třídit dokumenty na základě délky pole Array

  3. MongoDB- Vložte, pokud neexistuje, jinak přeskočte

  4. Chci načíst hodnoty vložené k určitému datu pomocí _id mongodb