gpt4 book ai didi

python - Pymongo 匹配和排序

转载 作者:行者123 更新时间:2023-12-01 02:02:45 26 4
gpt4 key购买 nike

我有许多带有选择日期和位置 ID 的文档。我正在尝试构建一个管道,该管道将匹配选择时间在过去一小时内的文档,然后对这些文档进行计数。我的日期采用 mm-dd-yyyy hh:mm:ss 格式,但似乎在 MongoDB 中表示为字符串

这是我到目前为止所拥有的

last_hour = datetime.datetime.now() - datetime.timedelta(minutes=60)
now = dateime.datetime.now()

pipeline = [
{"$match":{"select_time":{"$gt":last_hour,"$lte":now}}},
{"$unwind":"$loc_id"},
{"$group": {"_id":"$loc_id"}},
{"$sort": SON([("_id", -1), ("count", -1)])}
]

for i in list(db.loc_counter.aggregate(pipeline)):
print i

除了火柴之外,一切都正常。我不确定这是日期格式问题还是什么。

最佳答案

将当前时间格式转换为 ISODate 格式。您可能需要编写一个迁移来将当前 select_time 转换为 ISODate 格式 ( See supported formats 。)

当集合中的文档数量变得巨大时,管道的投影阶段可能会变得低效。

此外,修复了以错误的日期格式插入文档的脚本,以插入 ISODate 格式的带有 select_time 字段的文档。

lasthour = datetime.now() - timedelta(hours=1)

pipeline = [
{
'$project': {
'select_time_ISODate': {
'$dateFromString': {
'dateString': {
'$concat': [
{'$substr': ['$select_time', 6, 4]},
'-', {'$substr': ['$select_time', 0, 2]},
'-', {'$substr': ['$select_time', 3, 2]},
'T', {'$substr': ['$select_time', 11, 8]}
]
}
}
},
'loc_id': 1
}
},
{'$match': {'select_time_ISODate': {'$gte': lasthour}}},
{'$count': 'num_logs_since_past_hour'}
]
cursor = db.loc_counter.aggregate(pipeline)

print(tuple(cursor))

假设 select_time 的日期格式正确,您只需要当前管道的匹配和计数阶段。

关于python - Pymongo 匹配和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49432016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com