在mongoose Node.js中获取“参数必须是聚合管道操作符”错误

bsxbgnwa  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(89)

我正在尝试使用MERN堆栈处理我的第一个项目。我有一个get请求,试图返回MongoDB中我的units集合中所有“cost”字段的总和。我确信我做错了什么,但在广泛的谷歌搜索之后,我找不到任何对我来说更清楚的东西。
我试着看了一些视频和混乱的语法,但我感到非常失落。

app.get("/unitsTotal", async (request, response) => {
  try {
    Unit.aggregate([
      {
        $lookup: {
          from: "units",
          localField: "cost",
          foreignField: "_id",
          as: "costs",
        },
        $group: {
          _id: "null",
          totalCost: {
            $sum: "costs",
          },
        },
      },
    ]);
    return response.status(200).json(totalCost);
  } catch (error) {
    console.log(error.message);
    response.status(500).send({ message: error.message });
  }
});

字符串

nbysray5

nbysray51#

MongoDB聚合管道的每个阶段都必须是数组的一个元素,包含一个 single 聚合操作符:

Unit.aggregate([
  // 1st stage
  {
    $lookup: { // 1 operator per stage
      // ...
    },
  }, // Notice that each stage is an item (object) of the array, with a single operator (key of the object)

  // 2nd stage
  {
    $group: { // 1 operator per stage
      // ...
    },
  },
]);

字符串
返回MongoDB中我的units集合中所有“cost”字段的总和
听起来你实际上只涉及一个集合,你只是想对所有文档求和?
在这种情况下,您不需要$lookup阶段,您可以直接$group所有文档:

Unit.aggregate([
  {
    $group: {
      _id: null,
      totalCost: {
        $sum: "$cost" // The field path must start with dollar sign "$"
      }
    },
  },
]);


字段路径文档:
要指定字段路径,请在字段名或带点的字段名(如果字段在嵌入文档中)前面加上美元符号$。例如,"$user"指定user字段的字段路径,"$user.name"指定"user.name"字段的字段路径。

相关问题