我在数据库中有100个用户 每个用户都开始了5个课程。 每门课程都有统计数据。
课程示例:
{
userId: user1@gmail.com,
score: 50
}
数据库架构:
{
userId: {
type: ObjectId,
ref: Users
},
score: Number
}
如上所述,每个用户在数据库中都有5个类似的文档。
我尝试使用日期聚合(组):“$ last”命令,但我没有得到任何信息。
我希望找到排名前20的独特用户及其最新课程结果,并按分数排序(高分)。
答案 0 :(得分:1)
根据您的架构, 聚合查询:
[
{
"$group": {
"_id": "$userId",
"score": {
"$last": "$score"
}
}
}
]
将为您提供最后一条记录score
的所有唯一身份用户(分组依据)。
如果您只想获得 20 个用户,我们可以设置$limit条件:
[
{
"$group": {
"_id": "$userId",
"score": {
"$last": "$score"
}
}
},{
$limit:20
}
]