2017-08-15 37 views
0

我想要得到一个超出我的深度的Mongo 3.0查询。希望得到一点帮助。基本上,我的数据库有转录记录,其中有一个给定的用户名,项目ID,科考队ID和finished_date。那些是我感兴趣的领域。一个项目将有多个探险队,每个探险队都有多个转录队。MongoDB聚合多个计数和最新日期

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

到目前为止,这是很容易使用的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 

希望我解释得不错。将不胜感激任何帮助。

回答

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