我正在尝试获取超出我深度的Mongo 3.0查询。希望得到一些帮助。基本上,我的数据库有转录记录,其中有给定的用户名,项目ID,远征ID和finished_date。这些是我感兴趣的领域。一个项目将有多次探险,每次探险都有多次转录。
我想在给定项目的统计信息页面中显示给定用户的信息。显示器将是用户名,用户为整个项目提交的项目总转录,参与总计探测用户在整个项目中参与的探险次数,以及用户实际执行转录的最后日期。
到目前为止,通过使用user_name上的count并匹配project_id
,很容易获得Total Project Transcriptionsdb.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
希望我解释得那么好。非常感谢任何帮助。
答案 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
}
}
])