How to sort a populated document in find request?

前端 未结 7 1407
挽巷
挽巷 2020-11-28 09:52

I would like to sort a populated Document from the collection i fetch, i get an error requesting it.

Let\'s admit a Document Group (Group) and \'Member\

相关标签:
7条回答
  • 2020-11-28 10:13

    This code worked for me and may help you out

    Group.find({}).populate('Members').sort({ created_at: -1 })
    
    0 讨论(0)
  • 2020-11-28 10:16

    You can also implicitly specify only required parameters of populate:

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

    Have a look at http://mongoosejs.com/docs/api.html#document_Document-populate

    0 讨论(0)
  • 2020-11-28 10:17

    This example above works with Mongoose 2.x and above, use this syntax:

    Group
      .find({})
      .populate('Members', '_id name', null, { sort: { 'created_at': -1 } })
    
    0 讨论(0)
  • 2020-11-28 10:17

    This worked correctly for me in Mongoose Versions 5 and above.

    Clinics.findById(req.params.id).populate({path:'users',options:{ sort:{date : 1}}}).exec(callback);
    
    0 讨论(0)
  • 2020-11-28 10:21

    I ended up needing to populate a nested document, this worked for me:

    const video = await Video.findOne({ urlId }) // find video
            .populate('likes user') // populate the likes and owner (user) of video
            .populate({
                path: 'comments', // populate the comments as well,
                options: { sort: { date: -1 } }, // sorting the comments by date
                populate: {
                    path: 'user', // and populating the owner (user) of each comment,
                    select: 'username, date', // plucking whichever fields necessary from the User model
                },
            })
    ]);
    
    0 讨论(0)
  • 2020-11-28 10:32

    And for Mongoose 4.x use this syntax:

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

    Reference: Mongoose docs

    0 讨论(0)
提交回复
热议问题