我想为“事务”集合创建 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]},
...
}