我想为“事务”集合创建 meteor react 聚合。

交易有日期,所以我想按月汇总数据。

代码是:

ReactiveAggregate(this, Transactions, [
    {
      $match: {
        'date': {
          $gte: new Date(startDate),
          $lt: new Date(endDate)
        }
      }
    },
    {
      '$group' :
      {
        '_id' : { month: { $month: "$date" }},
        'totalProfit': { $sum: "$totalProfit"},
        'totalSales': { $sum: "$totalSales" },
        'totalExpenses': { $sum: "$totalExpenses" },
        count: { $sum: 1 }
      }
    },
    {
      '$project':{
        date: '$date',
        totalProfit: '$totalProfit',
        totalSales: '$totalSales',
        totalExpenses: '$totalExpenses',
      }
    }
  ], { clientCollection: "report3MonthsTransactions" });

});

当我这样做时,将提示错误:



谢谢!

最佳答案

您的$group子句为:

'$group' : {
  '_id' : { month: { $month: "$date" }},
  ...
}

结果是每个文档都有一个合成的_id:{_id: {month: <someMonth>}, ...},其中每个_id是一个确实不是ObjectID的对象。

就您而言,拥有{_id: <someMonth>, ...}就足够了。

可以通过将其分组如下来实现:

'$group' : {
  '_id' : { $month: "$date" },
  ...
}

顺便说一句,如果您需要将_id作为字符串(我认为是这样),则可以使用$substr进行转换:

'$group' : {
  _id: {$substr: [{$month: '$date'}, 0, 2]},
  ...
}

10-02 16:01