我正在尝试从我的日程表集合中提取下午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)])},
])
答案 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
字段。您还必须包含其他字段以使聚合管道的后续阶段起作用。