MongoDB聚合多个计数和最新日期

时间:2017-08-15 15:15:56

标签: mongodb mongodb-query

我正在尝试获取超出我深度的Mongo 3.0查询。希望得到一些帮助。基本上,我的数据库有转录记录,其中有给定的用户名,项目ID,远征ID和finished_date。这些是我感兴趣的领域。一个项目将有多次探险,每次探险都有多次转录。

我想在给定项目的统计信息页面中显示给定用户的信息。显示器将是用户名,用户为整个项目提交的项目总转录,参与总计探测用户在整个项目中参与的探险次数,以及用户实际执行转录的最后日期。

到目前为止,通过使用user_name上的count并匹配project_id

,很容易获得Total Project Transcriptions
db.transcriptions.aggregate([
{ "$match" : {"projectId" => 13}},
{ "$group": {
        "_id": "$user_name",
        "transcriptionCount" : {"$sum" : 1 } 
    }
}
])

每个转录文档都有一个expeditionId字段(4,7,9,10等)和finished_date。因此,如果用户执行了100次转录,只参加了7号和10号探险,则参与探险总数将为2 最后的finished_date是显示用户上次执行转录的日期。返回记录的示例:

user_name: john smith
transcriptionCount: 100
expeditionCount: 2
last_date: 2017-08-15

希望我解释得那么好。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以尝试以下聚合。

db.transcriptions.aggregate([
  {
    "$match": {
      "projectId" => 13
    }
  },
  {
    "$sort": {
      "finished_date": -1
    }
  },
  {
    "$group": {
      "_id": "$user_name",
      "transcriptionCount": {
        "$sum": 1
      },
      "expedition": {
        "$addToSet": "$expedition_id"
      },
      "last_date": {
        "$first": "$finished_date"
      }
    }
  },
  {
    "$project": {
      "_id": 0,
      "user_name": "$_id",
      "transcriptionCount": 1,
      "expeditionCount": {
        "$size": "$expedition"
      },
      "last_date": 1
    }
  }
])