活跃和总用户数Mongodb

时间:2018-02-19 11:53:17

标签: mongodb mongodb-query aggregation-framework aggregation

我想通过查询写一个组来写入活动用户和总计数(活动和非活动)按mongodb中的日期列分组。我可以将它们作为两个单独的脚本运行,但如何在一个脚本中检索相同的信息

db.user.aggregate(
 {
    "$match": { 'phoneInfo.verifiedFlag': true}
},
{
    "$project": {
           yearMonthDayUTC: { $dateToString: { format: "%Y-%m-%d", date: "$createdOn" } }

    }
},
{
    "$group": {
        "_id": {day: "$yearMonthDayUTC"},
        count: {
            "$sum": 1
        }
    }
},
{
    $sort: {
        "_id.day": 1,
    }
})

1 个答案:

答案 0 :(得分:0)

您可以使用组中的 $cond 运算符创建条件计数,如下所示(假设非活动/活动值位于名为status的字段中):< / p>

db.user.aggregate([
    { "$match": { 'phoneInfo.verifiedFlag': true} },
    {
        "$group": {
            "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$createdOn" } },
            "total": { "$sum": 1 },
            "active_count": {
                "$sum": {
                    "$cond": [ { "$eq": [ "$status", "active" ] }, 1, 0 ]
                }
            },
            "inactive_count": {
                "$sum": {
                    "$cond": [ { "$eq": [ "$status", "inactive" ] }, 1, 0 ]
                }
            }
        }
    },
    { "$sort": { "_id": 1 } }
])

对于不同的值,您可以调整以下管道:

db.user.aggregate([
    { "$match": { 'phoneInfo.verifiedFlag': true} },
    { 
        "$group": {
            "_id": { 
                "day": { 
                    "$dateToString": { 
                        "format": "%Y-%m-%d", 
                        "date": "$createdOn" 
                    } 
                },
                "status": { "$toLower": "$status" }
            },
            "count": { "$sum": 1 }
        }
    },
    { 
        "$group": {
            "_id": "$_id.day",
            "counts": {
                "$push": {
                    "status": "$_id.status",
                    "count": "$count"
                }
            }
        }
    },
    { "$sort": { "_id": 1 } }
])