关于meteor:如何使用mongodb聚合保存一个UNIX时间戳

How to preserve a UNIX datestamp with mongodb aggregation

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

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

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

我目前有以下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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 日期戳?


实现你可以做到的:

  • 在 $project 阶段添加 t 字段并继续通过管道填充它 - 因此将始终引用原始时间戳
  • 创建 dateTime 字段 \\'time: new Date("$_id.year", "$_id.month", "_id.day");\\'
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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")
            }
        }
    };