MongoDB聚合查询显示特定时间范围之间的所有对象

时间:2014-10-09 19:51:58

标签: mongodb pymongo

我正在尝试从我的日程表集合中提取下午6点到晚上11点之间播出的所有节目列表。问题是在匹配查询中,我不确定如何从StartUTC中提取小时值,这是一个DateTime值,这样我就可以在所有时间进行23> x> 18比较。有什么想法吗?

#"start": {"$gt": {"$hour": "$StartUtc"} }

print db.schedules.aggregate([
    {"$match": { "$StartUtc"" : { "$gt" : 18, "$lte" : 23 } } },
    {"$group": {"_id": "$OriginalProgramId", "count": {"$sum": 1}}},
    {"$sort": SON([("count", -1), ("_id", -1)])},
    ])

1 个答案:

答案 0 :(得分:1)

您需要的是date aggregation operators,更具体地说是$hour运算符,它返回日期的小时部分。您可以在管道的project阶段获取小时,因此它可以在match等的后续阶段中使用...

db.schedules.aggregate([
    {"starthour": { $hour: "$StartUtc" }}, // Project other values too so it's available in the next phase of the pipeline
    {"$match": { "$starthour"" : { "$gt" : 18, "$lte" : 23 } } },
    {"$group": {"_id": "$OriginalProgramId", "count": {"$sum": 1}}},
    {"$sort": SON([("count", -1), ("_id", -1)])},
])

注意:为简单起见,我只在starthour阶段中添加了project字段。您还必须包含其他字段以使聚合管道的后续阶段起作用。