首页 > 解决方案 > 如何在 Web 应用程序的前端显示 MongoDB 聚合管道结果?

问题描述

我有一个在控制器文件中利用 MongoDB 管道聚合的 Web 应用程序。我可以在 Postman 中运行 GET 请求,它会返回预期的结果。我将如何在我的应用程序前面显示相同的结果?我正在使用 Pug 模板和 express,并且通常会在我的视图控制器中使用如下代码将数据库信息提供给前端:

    exports.addReview = async (req, res, next) => {
      const ships = await Ship.find();
    
      res.status(200).render('addReview', {
        title: `Add Your Review`,
        ships,
      });
    };

是否有与上述类似的方法来包含管道聚合数据?这是聚合代码:

exports.getHighestRatings = catchAsync(async (req, res, next) => {
  const highestRatings = await Review.aggregate([
    {
      $sort: { rating: -1 },
    },
  ]);

  res.status(200).json({
    status: 'Success',
    data: {
      highestRatings,
    },
  });
});
 

标签: node.jsdatabasemongodbexpress

解决方案


简短的回答是“是”。

聚合数据的行为与您从 MongoDB 获得的任何其他数据相同。不同之处在于aggregation它比您上面使用的方法复杂得多find(),因此 JSON 的组织方式会有所不同。

试着console.log(JSON.stringify(highestRatings))看看它是如何组织的。

对您的代码的一些评论:

  1. 您不需要使用聚合进行排序。sort()你可以在一个方法结束时背负find()它,它会为你做这件事,就像这样:

    Review.find().sort({ 评级:-1 })

  2. 在您的第二个示例中,您将使用发送回的代码,res.status(200).json()但如果您希望它在前端呈现,您可能希望使用与.render()第一个示例中使用的方法相同的方法,如下所示:

    res.status(200).render()

我希望这有帮助。如果我误解了这个问题,请发表评论。


推荐阅读