我正在使用此代码来获取我的用户排行榜
var data = await db.models.user
.find({ points: { $ne: 0 } })
.collation({locale: "en_US", numericOrdering: true})
.sort('-points')
.limit(10)
.skip(page*10-10)但我找不到如何让用户在所有排行榜上的位置。我怎么才能得到它呢?
发布于 2020-12-30 17:20:28
我不认为有任何好的途径或方法可以做到这一点,但你仍然想这样做,然后尝试使用aggregate()和$unwind stage,
$match您的conditions$sort by points在降序$match by null,并将docs$unwind中所有文档的数组解构并传递includeArrayIndex: 'position'这将在每个文档中创建一个有序索引字段position,从零(0)开始,points和$limit var data = await db.models.user.aggregate([
{ $match: { points: { $ne: 0 } } },
{ $sort: { points: -1 } },
{
$group: {
_id: null,
docs: { $push: "$$ROOT" }
}
},
{
$unwind: {
path: "$docs",
includeArrayIndex: "position"
}
},
{ $skip: 10 },
{ $limit: page*10-10 }
])这可能是繁重的操作,在大数据中可能需要更多的执行时间!
https://stackoverflow.com/questions/65494673
复制相似问题