效果展示
先上图,有图有真相。
需求实现分析
需求:根据打卡天数进行排序,实现累积排行榜,查询前100名。
这里涉及到两张表:用户表,打卡记录表
实现思路
- 用户表和打卡记录表通过openid进行联合查询
- 统计每个用户到打卡次数
- 根据次数进行排序
- 查询前100名
代码实现
根据以上思路实现代码如下:
exports.main = async (event, context) => {
// 获取操作符
const $ = db.command.aggregate
// 用户表和打卡记录表联合查询
let res = await db.collection(‘用户表’).aggregate()
.lookup({
from: ‘打卡记录表’,
localField: ‘_openid’,
foreignField: ‘_openid’,
as: ‘list’,
})
// 统计每个人打卡次数
.project({
userInfo:1,
_openid:1,
size: $.size(’$list’)
})
// 进行排序
.sort({
size: -1,
})
// 限制100名
.limit(100)
.end()
return res
}
总结
这里面用到了4个关键函数:lookup、project、sort、limit。
lookup:官方文档传送门
project:官方文档传送门
sort:官方文档传送门
limit:官方文档传送门