基于unix时间戳的Mongodb聚合

前端之家收集整理的这篇文章主要介绍了基于unix时间戳的Mongodb聚合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我用谷歌搜索了很多,但没有找到任何有用的解决方案……我想找到每日用户的总数.
我有一个名为session_log的集合,其中包含以下文档
{
    "_id" : ObjectId("52c690955d3cdd831504ce30"),"SORTID" : NumberLong(1388744853),"PLAYERID" : 3,"LASTLOGIN" : NumberLong(1388744461),"ISLOGIN" : 1,"logoUT" : NumberLong(1388744853)
}

我想从LASTLOGIN汇总…

这是我的查询

db.session_log.aggregate(
    { $group : {
        _id: {
            LASTLOGIN : "$LASTLOGIN"
        },count: { $sum: 1 }
    }}
);

但它是按每个登录时间聚合,而不是每天.任何帮助,将不胜感激

MongoDB 3.0及更新版本:
db.session_log.aggregate([
    {
        "$group": {
            "_id": {
                "$dateToString": {
                    "format": "%Y-%m-%d","date": {
                        "$add": [
                            new Date(0),{ "$multiply": [1000,"$LASTLOGIN"] }
                        ]
                    }
                }
            },"count": { "$sum": 1 }
        }
    }
])

您需要通过将值乘以1000将LASTLOGIN字段转换为毫秒时间戳

{ "$multiply": [1000,"$LASTLOGIN"] }

,然后转换为日期

"$add": [
    new Date(0),"$LASTLOGIN"] }
]

这可以在$project管道中完成,方法是将您的毫秒时间添加到零毫秒Date(0)对象,然后从转换后的日期中提取$year,$month,$dayOfMonth个零件,然后您可以在$group管道中使用这些零件对文档进行分组到了白天.

因此,您应该将聚合管道更改为:

var project = {
    "$project":{ 
        "_id": 0,"y": {
            "$year": {
                "$add": [
                    new Date(0),"$LASTLOGIN"] }
                ]
            }
        },"m": {
            "$month": {
                "$add": [
                    new Date(0),"d": {
            "$dayOfMonth": {
                "$add": [
                    new Date(0),"$LASTLOGIN"] }
                ]
            }
        }
    } 
},group = {   
    "$group": { 
        "_id": { 
            "year": "$y","month": "$m","day": "$d"
        },"count" : { "$sum" : 1 }
    }
};

运行聚合管道:

db.session_log.aggregate([ project,group ])

会给出以下结果(基于样本文件):

{ "_id" : { "year" : 2014,"month" : 1,"day" : 3 },"count" : 1 }

改进将是在单个管道中运行上述内容

var group = {   
    "$group": { 
        "_id": {    
            "year": {
                "$year": {
                    "$add": [
                        new Date(0),"$LASTLOGIN"] }
                    ]
                }
            },"mmonth": {
                "$month": {
                    "$add": [
                        new Date(0),"day": {
                "$dayOfMonth": {
                    "$add": [
                        new Date(0),"$LASTLOGIN"] }
                    ]
                }
            }
        },"count" : { "$sum" : 1 }
    }
};

运行聚合管道:

db.session_log.aggregate([ group ])

猜你在找的Bash相关文章