MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Ordenação do mangusto por campo preenchido


A API do Mongoose parece oferecer suporte à classificação em campos preenchidos, mas há um bug que a quebra completamente: https://github.com/Automattic/mongoose/issues/2202 . Você obtém um resultado, mas é simplesmente errado.

Para pequenas quantidades de dados, não há problema em classificar a matriz de resultados usando Javascript Array.prototype.sort() . Tenha em mente que isso modifica diretamente a matriz classificada.

O que fiz neste caso foi adicionar uma propriedade de chave de classificação ao esquema para o modelo que você deseja classificar. Para o seu exemplo, você poderia fazer:
var FollowActionSchema = new Schema({
  // ...
  'brandSortKey': { type: String },
  'brand': {
    type: ObjectId,
    ref: 'Brand'
  },
  // ...
});

Isso não é perfeito, porque você mesmo terá que definir explicitamente essa propriedade com a chave correta:
var FollowAction = Model('FollowAction', FollowActionSchema);

var aBrand = // some brand object

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

Mas você pode classificar diretamente pela API do Mongoose (ou MongoDB):
FollowAction.find({})
   .sort({ brandSortKey:1 })
   .exec(function (err, sortedResults) {
       // do something with sorted results.
   });