MongoDB组由UNIX时间和计数不起作用

时间:2016-09-28 11:37:09

标签: mongodb mongodb-query pymongo aggregation-framework mongodb-aggregation

我有一份看起来像

的文件
{
    "_id" : ObjectId("57dffd3b65291f06dab34385"),
    "user" : "12345667890"
    "time" : NumberLong(1474297140186)
}

我正在尝试计算某个应用程序的访问者数量。我有64个字段,我的查询如下所示。

db.convo_log.aggregate([
   {
       '$group': {
            '_id': { 
                month: { $month: new Date("$time") }, 
                day: { $dayOfMonth: new Date("$time") }, 
                year: { $year: new Date("$time") } 
            }, 
            'count': { '$sum': 1 }
       }
   }
])

即使我正在寻找几个小组(因为有不同日期的数据),它返回为,

{
    "_id" : {
        "month" : 8,
        "day" : 17,
        "year" : 292278994
    },
    "count" : 64.0
}

我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

您无法通过该方式从时间戳创建日期对象表示。您需要使用arithmetic operators进行一些算术操作,即 $add new Date(0)对象构造函数的时间戳,该构造函数表示日期距离纪元0毫秒(尽管以较短的形式)。

总和{ "$add": ["$time", new Date(0)] }会产生一个新的约会对象。因此,将此与 $dateToString 运算符完全相同,您可以运行此管道以获得所需的结果:

db.convo_log.aggregate([
    {
        "$project": {
            "formattedDate": {
                "$dateToString": {
                    "format": "%Y-%m-%d",
                    "date": { "$add": ["$time", new Date(0)] }
                }
            }
        }
    },
    {
        "$group": {
            "_id": "$formattedDate",
            "count": { "$sum": 1 }
        }
    }
])