首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB聚合多个计数和最新日期

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

Stack Overflow用户
提问于 2017-08-15 15:15:56
回答 1查看 499关注 0票数 2

我正在尝试获得一个超出我的深度的mongo3.0查询。希望能得到一些帮助。基本上,我的数据库有转录记录,其中有一个给定的usernameproject_idexpedition_idfinished_date。这些是我感兴趣的领域。一个项目将有多个远征,每次考察都会有多个抄录。

我希望在给定项目的统计页面中显示给定用户的信息。显示将是用户名,用户为整个项目提交的全部项目记录,Total参与式远征--用户参与整个项目的探险次数,以及用户实际执行抄写的最后日期。

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

代码语言:javascript
运行
复制
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是显示用户最后一次进行转录的日期。返回记录示例:

代码语言:javascript
运行
复制
user_name: john smith
transcriptionCount: 100
expeditionCount: 2
last_date: 2017-08-15

希望我解释得够好。会很感激你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-15 15:41:34

您可以尝试下面的聚合。

代码语言:javascript
运行
复制
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
    }
  }
])
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45695906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档