Węzeł - Mongoose 3.6 - Sortowanie zapytania z wypełnionym polem

Próbuję wykonać zapytanie używane przez zdalną siatkę, więc będę musiał obsłużyć sortowanie (asc, desc) na każdym polu.

Oto schematy:

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);

A oto zapytanie:

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);
};

Zapytanie działa podczas sortowania na 'name' (tak Customer.name) lub 'address' (Customer.address), ale nie może go uruchomić, gdy jest to 'contact.firstName' (powinno być Customer.contact.firstName).

Czwartym parametrem wypełnienia fonction jest obiekt opcji, który może mieć obiekt sortowania, ale robi to:

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

nie działa (wydaje się sortować listę kontaktów na kliencie).

Jestem całkowicie nowy w mongoose (i mongo). Próbuję przenieść rzutowanie szyn na węzeł / express.

Czy istnieje sposób, w jaki mogę posortować moje zapytanie przez contact.firstName?

Dzięki!

Edycja: Skończyłem sortując ręcznie (Array.sort), ale naprawdę nie podoba mi się to rozwiązanie. Sortowanie jest synchronizowane, więc blokuje główny wątek node.js (popraw mnie, jeśli się mylę).

Czy jest coś, czego nie rozumiem? Sortowanie danych jest dla mnie problemem bazy danych, a nie aplikacją ... Miałem dużo nadziei na przekształcenie mojej aplikacji railsowej w node.js, ale wydaje się, że niektóre standardowe operacje (stronicowanie siatki) są naprawdę trudne do wdrożenia!

questionAnswers(1)

yourAnswerToTheQuestion