试图获得前20个用户统计信息MongoDB

时间:2018-01-29 11:53:44

标签: node.js mongodb mongoose

我在数据库中有100个用户 每个用户都开始了5个课程。 每门课程都有统计数据。

课程示例:

{
    userId: user1@gmail.com,
    score: 50
}

数据库架构:

{
  userId: {
    type: ObjectId,
    ref: Users
  },
  score: Number
}

如上所述,每个用户在数据库中都有5个类似的文档。

我尝试使用日期聚合(组):“$ last”命令,但我没有得到任何信息。

我希望找到排名前20的独特用户及其最新课程结果,并按分数排序(高分)。

1 个答案:

答案 0 :(得分:1)

根据您的架构, 聚合查询:

[
 {
  "$group": {
   "_id": "$userId",
   "score": {
    "$last": "$score"
   }
  }
 }
]

将为您提供最后一条记录score的所有唯一身份用户(分组依据)。 如果您只想获得 20 个用户,我们可以设置$limit条件:

[
 {
  "$group": {
   "_id": "$userId",
   "score": {
    "$last": "$score"
   }
  }
 },{
 $limit:20
 }
]