Javascript 本年度月度利润数组的汇总结果
非常不言自明。 我搜索了多个mongo聚合文档,并尽我所能构建了查询。 值得指出的是,我几乎没有聚合经验,这是我迄今为止所做的最复杂的聚合之一Javascript 本年度月度利润数组的汇总结果,javascript,node.js,mongodb,aggregation-framework,Javascript,Node.js,Mongodb,Aggregation Framework,非常不言自明。 我搜索了多个mongo聚合文档,并尽我所能构建了查询。 值得指出的是,我几乎没有聚合经验,这是我迄今为止所做的最复杂的聚合之一 let currentYear = new Date(); currentYear.setFullYear(currentYear.getFullYear()); currentYear.setMonth(0); currentYear.setDate(1); await Order.agg
let currentYear = new Date();
currentYear.setFullYear(currentYear.getFullYear());
currentYear.setMonth(0);
currentYear.setDate(1);
await Order.aggregate([
{ $match: {
order_ordered_on:{
$gte: currentYear
},
order_status: 'Delivered'
}},
{ $group : {
_id: {month: {$month : '$order_ordered_on'}},
total: {$sum: '$order_total'},
}},
{ $sort : {
_id : 1
}},
{$project: {
_id:1,
total: 1
}}
]).exec((err, result) =>{
if (err) throw err;
let amount = result.map(a => a.total);
res.json({
amount
});
})
为了解释我的思维过程,首先我为今年设定了一个日期,从1月1日到当前时间。
然后,我将其与订单匹配,订单上有我工作的日期,并且还匹配以仅选择具有已交付状态的订单。
我按id分组,将其分为几个月,并将总金额按月份相加。
按升序排序对数组进行排序并投影结果数据。
之后,我将结果映射到一个数组,这是我的目标(数组中的每个位置对应一个月的利润)
问题是返回的总值是荒谬的,并且与预期值不匹配。因为我没有太多的经验,我找不到我犯错误的地方。
感谢您的帮助
为了让我自己更清楚,我目前使用的是单一订单模型,以及Order_ordered_on、Order_status和Order_total字段
该合计的主要目标是将当前年度利润拆分为每月利润,从1月1日到现在,然后通过前端开发将其绘制在图表中。该数据包含从2017年到当天的订单。前端需要接收的格式是带有利润值的有序数组。查询工作正常;我尝试了一些测试数据,也得到了正确的输出。很可能,您的输入数据并不像您期望的那样。我的测试数据(3个文档):
{id:1,订单状态:“已交付”,订单总数:200,订单状态:“已交付”,订单id:2,订单状态:“已交付”,订单总数:18,订单状态:已交付,订单日期:ISODate(“2019-12-02T14:00:11.001Z”)},{id:3,订单状态:“已交付”,订单总数:95,订单日期:ISODate(“2019-11-26T12:00:001Z”)}
@prasad_uu我更改了一点代码,并添加了一个计数来检查查询结果是否有意义,在手动重新排列和结果比较之后,事实上查询工作正常。谢谢你向我确认这是正确的,它让我亲自检查结果以确定。