Как отсортировать заполненный документ в запросе на поиск? - программирование
Подтвердить что ты не робот

Как отсортировать заполненный документ в запросе на поиск?

Я хотел бы отсортировать заполненный документ из коллекции я fetch, я получаю сообщение об ошибке.

Допустим документ Group (группа) и 'Member' (Group.Members)

Group
  .find({})
  .populate('Members')

Работает отлично, но я бы хотел сортировать его, поэтому я делаю это:

Group
  .find({})
  .populate('Members', ['_id', 'name'], null, { sort: [[ 'created_at', 'desc' ]] })

Я получаю ошибку TypeError: Invalid select() argument. Must be a string or object., добавляя это...

4b9b3361

Ответ 1

Этот пример выше работает с Mongoose 2.x, с Mongoose 3.x, используйте этот синтаксис:

Group
  .find({})
  .populate('Members', '_id name', null, { sort: { 'created_at': -1 } })

Ответ 2

Вы также можете неявно указать только необходимые параметры заполнения:

Group
  .find({})
  .populate({path: 'Members', options: { sort: { 'created_at': -1 } } })

Посмотрите http://mongoosejs.com/docs/api.html#document_Document-populate

Ответ 3

И для Mongoose 4.x используйте этот синтаксис:

Kitten.find().populate({
    path: 'owner'
  , select: 'name'
  , match: { color: 'black' }
  , options: { sort: { name: -1 }}
}).exec(function (err, kittens) {
  console.log(kittens[0].owner.name) // Zoopa
})

// alternatively
Kitten.find().populate('owner', 'name', null, {sort: { name: -1 }}).exec(function (err, kittens) {
  console.log(kittens[0].owner.name) // Zoopa
})

Ссылка: Mongoose docs

Ответ 4

Это работало правильно для меня в Mongoose Версии 5 и выше.

Clinics.findById(req.params.id).populate({path:'users',options:{ sort:{date : 1}}}).exec(callback);

Ответ 5

В Mongoose v5.0.5 у меня работает следующее:

    Schedule.find({})
        .populate({path: 'eventComments', options: {sort:{"commentDate": "descending"}}})
        .exec(function(err, result) {
            if (err) {
                throw err
            } 

            else {
                return res.json(result);
            }
    });

Ответ 6

Этот код работал для меня и может помочь вам

Group.find({}).populate('Members').sort({ created_at: -1 })