我必须在给定时间段内对一个集合进行分组和计数,其中小时是在下午4点之后。我有一个查询,在给定的时间内创建计数,但我不知道如何查询给定的小时。
到目前为止,这是我的查询,两者都运行良好:
db.appointment.group({
key: { operator: 1 },
cond: {
department: "Residential",
action: "MOVE",
created: {
$gte: ISODate("2016-09-01T00:00:00.000Z"),
$lt:ISODate("2016-10-01T00:00:00.000Z")
},
},
reduce: function(curr, result){ result.count++; },
initial: { count: 1 }
})
和
db.appointment.aggregate([
{
$match: {
department: "Residential",
action: "MOVE",
created:{
$gte: ISODate("2016-09-01T00:00:00.000Z"),
$lt:ISODate("2016-10-01T00:00:00.000Z")
}
}
},
{
$group:{
_id: "$operator",
count: { $sum: 1 }
}
}
])
现在缺少的是:创建的小时为$gte: 16
答案 0 :(得分:3)
使用 $redact
,如下所示:
db.appointment.aggregate([
{
"$redact": {
"$cond": [
{
"$and": [
{ "$eq": [ "$department", "Residential" ] },
{ "$eq": [ "$action", "MOVE" ] },
{ "$gte": [ "$created", ISODate("2016-09-01") ] },
{ "$lt": [ "$created", ISODate("2016-10-01") ] },
{ "$gte": [ { "$hour": "$created" }, 16 ] }
]
},
"$$KEEP",
"$$PRUNE"
]
}
},
{
$group:{
_id: "$operator",
count: { $sum: 1 }
}
}
])