import sys
from pymongo import MongoClient
from bson.son import SON as sss #固定排序顺序
def get_rank(user_id):
client = MongoClient() #链接数据库
db = client.shiyanlou #选择操作的数据库
#aggregate 是mongodb的聚合
rest = db.contests.aggregate([
{'$group': {
'_id': '$user_id',
'score': {'$sum': '$score'},
'time': {'$sum':'$submit_time'}
}},
{'$sort': sss(
[('score', -1), ('time', 1)] #sss 先按score 降序 然后再按time 升序
)}
])
for r, s in enumerate(rest): #enumerate函数 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
if user_id == s['_id']:
return r+1, s['score'], s['time']
if __name__ == '__main__':
print(get_rank(int(sys.argv[1])))
copy
感谢助教-月咏小萌的帮助 mongodb的聚合学习文档
学习时间 726分钟
操作时间 452分钟
按键次数 12080次
实验次数 4次
报告字数 883字
是否完成 完成