折腾:
期间,需要对于:

去用Python的pymongo查询出来:
user_id:为某个用户的id,比如28
start_time:满足当前时间之前最近半年范围内的
且最好能对于结果去排序
pymongo find datetime compare
python – MongoDB / Pymongo Query with Datetime – Stack Overflow
好像直接用:
for doc in db.wing_model.find({'time': {'$gte': start, '$lt': end}}):就可以了?
MongoDB Query by DateTime with Python – Stack Overflow
db.collection.find({"datefield" : ISODate("YYYY-MM-DDTHH:MM:SS")})
db.collection.find({"datefield" : {"$gte" : <beginning_of_day_as_ISODate>, "$lte" : <end_of_day_as_ISODate>})
{createdDate : {$gte : ISODate("2017-12-06T00:00:00"), $lte : ISODate("2017-12-06T23:59:59")}}python – pymongo query by datetime – Stack Overflow
python – Query DateTime with PyMongo – Stack Overflow
db.collection.find({'createTime':{'$lt':datetime.datetime.now(), '$gt':datetime.datetime.now() - timedelta(hours=24)}})去试试
curTime = datetime.datetime.now()
halfYearBeforeTime = curTime - datetime.timedelta(days = settings.USER_EVAL_REPORT_DAYS_AGO)
userEvaluations = evalCollection.find({
"user_id": userId,
"start_time": {
"$gte": halfYearBeforeTime,
"$lte": curTime
}
})
log.debug("userEvaluations=%s", userEvaluations)
for eachEvaluation in userEvaluations:
log.debug("eachEvaluation=%s", eachEvaluation)是可以搜到的:

log输出是有内容的:

然后再去排序
pymongo find sort by time
python – pymongo sorting by date – Stack Overflow
去试试
通过:
timeKeyName = "start_time"
# timeKeyName = "finish_time"
halfYearBeforeTime = curTime - datetime.timedelta(days = settings.USER_EVAL_REPORT_DAYS_AGO)
userEvaluations = evalCollection.find({
"user_id": userId,
timeKeyName: {
"$gte": halfYearBeforeTime,
"$lte": curTime
}
}).sort(timeKeyName, pymongo.ASCENDING)是可以的排序的。
另外还需要去:
想要把返回值变成list
pymongo find cursor to list
How to make pymongo’s find() return a list? – Stack Overflow
myresults = list(mydb.mycollection.find())
直接用list即可:
curTime = datetime.datetime.now()
# timeKeyName = "start_time"
timeKeyName = "finish_time"
earliestTime = curTime - datetime.timedelta(days = settings.USER_EVAL_REPORT_DAYS_AGO)
userEvaluations = evalCollection.find({
"user_id": userId,
timeKeyName: {
"$gte": earliestTime,
"$lte": curTime
}
}).sort(timeKeyName, pymongo.DESCENDING).limit(settings.USER_EVAL_REPORT_LIMIT_NUM)
userEvaluationList = list(userEvaluations)【总结】
最后用:
import pymongo
import datetime
curTime = datetime.datetime.now()
# timeKeyName = "start_time"
timeKeyName = "finish_time"
earliestTime = curTime - datetime.timedelta(days = 30*6)
userEvaluations = evalCollection.find({
"user_id": userId,
timeKeyName: {
"$gte": earliestTime,
"$lte": curTime
}
}).sort(timeKeyName, pymongo.DESCENDING).limit(20)
userEvaluationList = list(userEvaluations)
userEvaluationList.reverse()
historyList = []
for eachEvaluation in userEvaluationList:
if "overall_level" in eachEvaluation:
curTimeLevelDict = {
"time": eachEvaluation[timeKeyName],
"overall_level": eachEvaluation["overall_level"]
}
historyList.append(curTimeLevelDict)
log.debug("historyList=%s", historyList)实现了想要的逻辑:
去mongodb查询
最早半年前,最晚当前时间
结果中再去根据时间倒序
然后再去取最多20个
从而实现:最近半年,最多20个,只不过顺序是反的而已
对于时间倒序后的结果,再调换顺序
即可得到我要的:
最近半年的,最多20个,按照时间升序排列
然后输出希望的结果:
