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' (Group.Members)
Group
.find({})
.populate('Members')
Works perfectly, but i would like to sort it so i do this:
Group
.find({})
.populate('Members', ['_id', 'name'], null, { sort: [[ 'created_at', 'desc' ]] })
I get the error TypeError: Invalid select() argument. Must be a string or object.
by adding this...
You can also explicitly 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
This example above works with Mongoose 2.x and above, use this syntax:
Group
.find({})
.populate('Members', '_id name', null, { sort: { 'created_at': -1 } })
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
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With