【发布时间】:2020-05-17 18:45:03
【问题描述】:
我创建了这个查询来获取某个日期时间范围内的所有文档的最大创建日期时间。我正在查找每小时所有最新文档的列表。
pipe = [
{
"$addFields": {
"start": {
"$dateFromString": {
"dateString": "$StartTime",
"format": "%Y-%m-%dT%H:%M:%S%z"
}
},
"created": {
"$dateFromString": {
"dateString": "$CreatedDateTime",
"format": "%Y-%m-%dT%H:%M:%S%z"
}
}
}
},
{
"$match": {
"start": {
"$gte": start_time,
"$lte": end_time
}
}
},
{
"$sort": {
"created": -1
}
},
{
"$group": {
"_id": "$start",
"doc": {
"$first": "$$ROOT"
}
}
},
{
"$replaceRoot": {
"newRoot": "$doc"
}
}
]
cursor = COLLECTION.aggregate(pipeline=pipe)
但是,由于我使用的是 $addFields,所以我也在投射 start 和 created,这不是我在寻找的。我能否以排除这些字段并仅包含原始文档的方式复制此查询。我还想知道这是否不是我的解决方案的最佳查询,因此欢迎任何输入或建议。
这是一个示例文档:
{
"StartTime" : "2020-05-01T00:00:00-05:00",
"EndTime" : "2020-05-01T00:59:59-05:00",
"Value" : 100,
"CreatedDateTime" : "2020-05-01T00:00:00-05:00"
}
如果我要查询一小时,这就是查询返回的内容:
{
"StartTime" : "2020-05-01T00:00:00-05:00",
"EndTime" : "2020-05-01T00:59:59-05:00",
"Value" : 100,
"CreatedDateTime" : "2020-05-01T00:00:00-05:00",
"start" : datetime.datetime(2020,05,01),
"created" : datetime.datetime(2020,05,01)
}
如果我要查询多个小时,我正在寻找的结果是示例文档或示例文档列表。
【问题讨论】:
-
请使用示例文档和所需的 o/p 编辑此帖子。
标签: python mongodb mongodb-query aggregation-framework pymongo