如何使用mongodb聚合

时间:2016-05-25 08:03:58

标签: mongodb meteor aggregation-framework

我想在meteor / MongoDB中汇总数据。我有几千个条目格式如下

{_id: sadsadjhsjdys7ad67as8d, t: 1464162907, prod: 123, sys: xyz}

我想将它们分类到相对日期并聚合prod字段。

我目前有以下

var project = {
    "$project" : {
        "_id" : 0,
        "y" : {
            "$year" : {
                "$add" : [
                    new Date(0), {
                        "$multiply" : [1000, "$t"]
                    }
                ]
            }
        },
        "m" : {
            "$month" : {
                "$add" : [
                    new Date(0), {
                        "$multiply" : [1000, "$t"]
                    }
                ]
            }
        },
        "d" : {
            "$dayOfMonth" : {
                "$add" : [
                    new Date(0), {
                        "$multiply" : [1000, "$t"]
                    }
                ]
            }
        },

        "prod" : "$prod",
        "sys" : "$sys"

    }
};
var group = {
    "$group" : {
        "_id" : {
            "year" : "$y",
            "month" : "$m",
            "day" : "$d",
            "test" : "$test"
        },
        sys : "sys",
        prod : {
            $sum : "$prod"
        }
    }
};

var result = power_stats.aggregate([match, project, group]);

然而这使我的_id进入[y:2016,m:5,d:25],这是我想要的聚合形式,但是如果我想稍后用日期进行条件查找,它将完全没用有了这些数据。

如何使用MongoDBe聚合保留UNIX日期戳?

1 个答案:

答案 0 :(得分:1)

实现这一目标:

  1. 在$ project阶段添加t字段并继续通过管道填充它 - 因此将始终引用oryginal timestamp
  2. 创建dateTime字段'时间:新日期(“$ _ id.year”,“$ _id.month”,“_ id.day”);'
  3. var group = {
        "$group" : {
            "_id" : {
                "year" : "$y",
                "month" : "$m",
                "day" : "$d",
                "test" : "$test"
            },
    
            prod : {
                $sum : "$prod"
            },
            dateTime : {
                $addToSet : new Date("$_id.year", "$_id.month", "$_id.day")
            }
        }
    };