我正在尝试获得一个超出我的深度的mongo3.0查询。希望能得到一些帮助。基本上,我的数据库有转录记录,其中有一个给定的username、project_id、expedition_id和finished_date。这些是我感兴趣的领域。一个项目将有多个远征,每次考察都会有多个抄录。
我希望在给定项目的统计页面中显示给定用户的信息。显示将是用户名,用户为整个项目提交的全部项目记录,Total参与式远征--用户参与整个项目的探险次数,以及用户实际执行抄写的最后日期。
到目前为止,通过在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希望我解释得够好。会很感激你的帮助。
发布于 2017-08-15 15:41:34
您可以尝试下面的聚合。
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
}
}
])https://stackoverflow.com/questions/45695906
复制相似问题