Mongodb查询datetime中的小时gte

时间:2016-10-11 14:30:52

标签: mongodb mongodb-query aggregation-framework

我必须在给定时间段内对一个集合进行分组和计数,其中小时是在下午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

1 个答案:

答案 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 }
        }
    }
])