Mongoose报“Arguments must be aggregate pipeline operators”错误求助
解决MongoDB units集合cost字段总和计算的问题
你的代码存在几个明显问题,直接导致无法正确计算总和:
- 完全没必要用
$lookup:你要计算的是同一个units集合里所有cost字段的总和,关联自身的操作既多余又逻辑错误(用cost字段去匹配_id完全不合理)。 - 异步操作没处理:
Unit.aggregate()是异步方法,必须加await才能获取结果,而且你没把结果赋值给变量,直接用totalCost会报未定义错误。 $sum参数错误:$sum需要直接引用集合里的cost字段,写法是$cost,你写的"costs"是lookup生成的数组,根本没法用来求和。
修正后的代码如下:
app.get("/unitsTotal", async (request, response) => { try { // 直接聚合求和,不需要lookup const result = await Unit.aggregate([ { $group: { _id: null, // 这里不需要加引号,null是MongoDB的特殊值 totalCost: { $sum: "$cost" } // 直接引用cost字段 } } ]); // 聚合结果是数组,取第一个元素的totalCost,处理集合为空的情况 const totalCost = result[0]?.totalCost || 0; return response.status(200).json({ totalCost }); } catch (error) { console.log(error.message); response.status(500).send({ message: error.message }); } });
补充说明:
_id: null用来把所有文档归为一组,以此计算全局总和。result[0]?.totalCost || 0是为了处理集合为空的场景,避免返回undefined。
内容的提问来源于stack exchange,提问作者Coleman Kuseliauskas
相关产品推荐
相关产品推荐

