2014-12-05 4 views
0

У меня есть две коллекции MongoDB Customer и User в 1:1 отношения. Я пытаюсь запросить оба документа, используя Mongoose Population и сортировать их по User.name.Правильный синтаксис для сортировки mongoose 3.x заполненный документ

Ничто не работает. Мой Мангуст - 3.8.19.

Customer 
    .find({}) 
    .populate("user", "name email phone") 
    .sort({ "name": 1 }) 
    .exec() 

Customer 
    .find({}) 
    .populate("user", "name email phone", null, { sort: { 'name': 1 } }) 
    .exec() 

Customer 
    .find({}) 
    .populate({ 
     path: "user", 
     select: "name email phone", 
     options: { sort: { "name": 1 }} 
    }). 
    exec() 

Customer 
    .find({}) 
    .populate({ 
     path: "user", 
     select: "name email phone", 
     options: { sort: [{ "name": 1 }]} 
    }) 
    .exec() 

Я нашел How to sort a populated document in find request?, но не удался для меня.

Было бы что-то, как показано ниже в SQL:

SELECT customer.*, user.name, user.email, user.phone FROM customer 
JOIN user ON customer.user_id = user.id 
ORDER BY user.name ASC 
+2

Вы не можете сортировать свои документы в заполненном поле. http://stackoverflow.com/questions/19428471/node-mongoose-3-6-sort-query-with-populated-field – JohnnyHK

ответ

5

Благодаря @JohnnyHK in comment, не представляется возможным сортировать заселенных поля в MongoDB и Moongose. The only option is to sort the entire array of results manually.

Mongo не имеет объединений. Единственный способ отсортировать заполненные документы - это сделать вручную после получения всех результатов.

Я решил это, используя Array.sort([compareFunction]), чтобы отсортировать результат по запросу Mongoose. Однако это может сильно повлиять на производительность при сортировке большого набора данных.

В качестве бокового узла, я рассматриваю возможность перехода к реляционной базе данных с node.js.

-1

Я не знаю, почему люди говорят, что вы не можете сортировать населенное поле ....

model.findOne({name: request.params.posts}) 
    .populate('messages', '_id message createDate', null, { sort: { 'createDate': -1 } }) 
    .exec(function(error, results) { 
}) 

Где мои модели «должность», имеет ObjectID сообщений массива в нем, то есть населенное здесь и отсортировано по его createDate. Он отлично работает.

+0

Вероятно, это может сортировать сообщения по каждому сообщению, а не по всем целым результатам. Ваше решение очень похоже на мой второй пример, который не мог отсортировать весь результат по заполненному документу. – Sithu

 Смежные вопросы

  • Нет связанных вопросов^_^