sql >> Base de Datos >  >> NoSQL >> MongoDB

Mangosta ordenar por campo poblado

La API de Mongoose parece admitir la clasificación en campos completos, pero hay un error que la rompe por completo: https://github.com/Automattic/mongoose/issues/2202 . Obtienes un resultado, pero es simplemente incorrecto.

Para pequeñas cantidades de datos, está bien ordenar la matriz de resultados usando Javascript Array.prototype.sort() . Sin embargo, tenga en cuenta que esto modifica directamente la matriz ordenada.

Lo que he hecho en este caso es agregar una propiedad de clave de ordenación al esquema para el modelo que desea ordenar. Para tu ejemplo, podrías hacer:

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

Esto no es perfecto, porque tendrá que establecer explícitamente esta propiedad con la clave correcta usted mismo:

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

var aBrand = // some brand object

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

Pero luego puede ordenar directamente a través de Mongoose API (o MongoDB):

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