我创建此查询是为了按文档的最大创建日期时间获取特定日期时间范围内的所有文档。我正在寻找每小时所有最新文件的列表
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)
}
如果要查询多个小时,我要查找的结果是示例文档或示例文档列表
在聚合管道中不需要
$addFields
阶段。只需将start_time
和end_time
转换为字符串。用StartTime
替换start
,用CreatedDateTime
替换created
因此,最后您的查询应该如下所示:
在我的例子中,我初始化了
start_time
和end_time
,如下所示:您可以像上面那样进行一些修改,然后运行查询
简短解释:字符串比较是以词典编纂的方式进行的。因此,
"01"
小于"02"
,"03"
大于"01"
,同样地,"2020-05-01 00:00:00-05:00"
小于等于"2020-05-01T00:00:00-05:00"
,并且"2020-05-01 00:59:59-05:00"
大于等于"2020-05-01T00:00:00-05:00"
我希望以上内容能有所帮助
相关问题 更多 >
编程相关推荐