我想从我收集的集合中对填充的文档进行排序,我收到错误请求。
让我们承认文件Group
(小组)和'会员'(小组成员)
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.
...
答案 0 :(得分:48)
您也可以隐式指定populate所需的参数:
Group
.find({})
.populate({path: 'Members', options: { sort: { 'created_at': -1 } } })
查看http://mongoosejs.com/docs/api.html#document_Document-populate
答案 1 :(得分:16)
上面这个例子适用于Mongoose 2.x,使用Mongoose 3.x,使用这个synwtax:
Group
.find({})
.populate('Members', '_id name', null, { sort: { 'created_at': -1 } })
答案 2 :(得分:11)
答案 3 :(得分:2)
在Mongoose版本5及更高版本中,这对我来说正常。
Clinics.findById(req.params.id).populate({path:'users',options:{ sort:{date : 1}}}).exec(callback);
答案 4 :(得分:0)
以下在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);
}
});

P.S。此示例与Kitten示例之间的主要区别在于 commentDate 是引号,而 Date (在Kitten示例中)则不是。有些人可能需要这种改动。希望这可以帮助。
答案 5 :(得分:0)
我最终需要填充一个嵌套文档,这对我有用:
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
},
})
]);
答案 6 :(得分:-1)
此代码对我有用,可能会对您有所帮助
Group.find({}).populate('Members').sort({ created_at: -1 })