我正在尝试使用mongoose获取用户集合的最后20条记录:
{{1}}
这很有效,显示最后20项。
但是数组中的项目是从最新到最旧的排序,有没有办法用mongoose来解决这个问题?
由于
答案 0 :(得分:0)
查找总数并仅选择最新的20,可能这是您找不到的有效方法,但这样可以解决您的问题。
User.count({'owner': req.params.id},function(err,count){
if(count){
var skipItem=count-20;
User.find({'owner': req.params.id}).
.skip(skipItem)
.limit(20)
.sort(date:'1').
exec(.....)
}
});
答案 1 :(得分:0)
您当然可以使用聚合来执行此操作,例如:
db.user.aggregate[(
{ $match : {"owner" : req.params.id}},
{ $sort : {"date" : -1}},
{ $limit : 20},
{ $sort : {"date" : 1}}
])
关于此汇总的说明:
更新:我认为使用find() with cursor methods可能 ,因为您需要两个不同的sort()
操作。但是,MongoDB 不将它们视为一系列独立操作;文档给出了一个按顺序编写的方法示例 - sort().limit()
- 等同于相反的顺序 - limit().sort()
,表明订单不能被视为有意义。
答案 2 :(得分:-1)
db.users.aggregate([
{ $match: {
'owner': req.params.id
}},
{ $unwind: '[arrayFieldName]' },
{ $sort: {
'[arrayFieldName]': -1/1,
'date':-1
}}
])