【问题标题】:MongoDB Aggregate multiple count and latest dateMongoDB聚合多个计数和最新日期
【发布时间】:2018-01-23 13:18:48
【问题描述】:

我正在尝试获取超出我能力范围的 Mongo 3.0 查询。希望能得到一点帮助。基本上,我的数据库有转录记录,其中有一个给定的usernameproject_idexpedition_idfinished_date。这些是我感兴趣的领域。一个项目将有多个探险,每个探险都有多个转录。

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

到目前为止,通过使用user_name 上的计数并匹配project_id,很容易获得项目总转录数

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

希望我解释得足够好。将不胜感激。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您可以尝试以下聚合。

    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
        }
      }
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多