我想为Transactions集合创建流星反应聚合.
交易有日期,所以我想按月汇总数据.
代码是:
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" });
});
Run Code Online (Sandbox Code Playgroud)
当我这样做时,它会提示错误:
错误:Meteor当前不支持ObjectID以外的对象作为ID
谢谢!
你的$group
条款是:
'$group' : {
'_id' : { month: { $month: "$date" }},
...
}
Run Code Online (Sandbox Code Playgroud)
这导致每个文档都有一个复合_id
: {_id: {month: <someMonth>}, ...}
,其中每个_id
都是一个实际上不是ObjectID
.
对于你的情况,拥有{_id: <someMonth>, ...}
就足够了。
这可以通过将其分组来实现,如下所示:
'$group' : {
'_id' : { $month: "$date" },
...
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您需要将 the_id
作为字符串(我认为您这样做),您可以使用$substr
它来转换它:
'$group' : {
_id: {$substr: [{$month: '$date'}, 0, 2]},
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
251 次 |
最近记录: |