Meteor聚合组按月份在Date.now()属性值上

时间:2017-03-08 00:41:13

标签: meteor

Meteor服务器代码尝试按月对文档进行分组。这样就可以得出每个月所有文件的数量 这些文件有createdAt = Date.now();属性和meteorhacks:聚合  已安装。有什么建议? thx

我考虑过:
1)转换集合添加新属性“MMYYYY:6位数字”并将其分组。

1 个答案:

答案 0 :(得分:1)

如果您打算经常汇总,那么您的考虑是好的。如果您在创建文档时在文档中编写了年份和月份字符串,那肯定会更快。请记住,如果修改相应的日期字段,则必须记住保持这些字符串是最新的。

如果你不经常聚会,那么它可能不值得付出努力。只需将您的纪元时间值转换为新的Date对象,并利用聚合管道中的Date聚合运算符。这是一个例子。

var Metrics = new Mongo.Collection('metrics');

Metrics.aggregate([
  {$project: {
    createdAtDate: { $add: [new Date(0), "$createdAt"] }
  }},
  {$project : {
     year : {$year : "$createdAtDate"}, 
     month : {$month : "$createdAtDate"}
  }},
  {$group : {
     _id : {year : "$year", month : "$month"}, 
     count : {$sum : 1}
  }}
]);

如果您使用日期字符串(其中文档字段名为" createdAtString"是MMYYYY),那么您的管道将会是这样的。

var Metrics = new Mongo.Collection('metrics');

Metrics.aggregate([
  {$group : {
     _id : "$createdAtString", 
     count : {$sum : 1}
  }}
]);