Nó - Mangusto 3.6 - Consulta de classificação com campo preenchido

Eu estou tentando fazer uma consulta usada por uma grade remota, então eu vou ter que lidar com sort (asc, desc) em todos os campos.

Aqui estão os esquemas:

var customerSchema = new mongoose.Schema({
status: {type: mongoose.Schema.Types.ObjectId, ref: 'Status'},
contact: {type: mongoose.Schema.Types.ObjectId, ref: 'Contact'}
}, { collection: 'Customer' });

customerSchema.virtual('contactName').get(function () {
   if (this.contact && this.contact.get) {
       return this.contact.get('firstName') + ' ' + this.contact.get('lastName');
   }

   return '';
});

customerSchema.virtual('statusName').get(function () {
   if (this.status && this.status.get) {
       return this.status.get('name');
   }

   return '';
});

customerSchema.set('toJSON', { virtuals: true });
customerSchema.set('toObject', { virtuals: true });
mongoose.model('Customer', customerSchema);

// STATUS
var statusSchema = new mongoose.Schema({}, { collection: 'Status' });
mongoose.model('Status', statusSchema);

// CONTACT
var contactSchema = new mongoose.Schema({
    firstName: String,
    lastName: String
}, { collection: 'Contact' });
mongoose.model('Contact', contactSchema);

E aqui está a consulta:

exports.customerList = function (predicate ,callback){
if (!predicate) predicate = 'name';
var Customers = mongoose.model( 'Customer' );

Customers.find()
    .select('name phone address status contact contactName statusName')
    .populate('status', 'name')
    .populate('contact', 'firstName lastName')
    .sort(predicate)
    .exec(callback);
};

A consulta está funcionando ao classificar em 'nome' (assim, Customer.name) ou 'endereço' (Customer.address), mas não pode fazê-lo funcionar quando está 'contact.firstName' (deve ser Customer.contact.firstName).

O quarto parâmetro da função populate é um objeto de opção que pode ter um objeto de classificação, mas fazendo isso:

.populate('contact', 'firstName lastName', null, { sort {'firstName': 1}})

não está funcionando (parece classificar lista de contatos no cliente).

Eu sou completamente novo para mangusto (e mongo). Eu estou tentando portar um projetor de trilhos para nó / expresso.

Existe uma maneira que eu possa classificar minha consulta por contact.firstName?

Obrigado!

Edit: Acabei fazendo o meu tipo manualmente (Array.sort), mas eu realmente não gosto dessa solução. Sort é sincronia, então bloqueia o thread principal node.js (corrija-me se eu estiver errado).

Existe algo que eu não entendo? Ordenar o conjunto de dados é para mim uma preocupação do banco de dados e não um aplicativo ... Eu estava tendo muita esperança em transformar meu aplicativo rails em node.js, mas parece que algumas operações padrão (paginação de uma grade) são realmente difíceis de implementar!

questionAnswers(1)

yourAnswerToTheQuestion