node.js - 如何在 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,
},
});
});
解决方案
简短的回答是“是”。
聚合数据的行为与您从 MongoDB 获得的任何其他数据相同。不同之处在于aggregation
它比您上面使用的方法复杂得多find()
,因此 JSON 的组织方式会有所不同。
试着console.log(JSON.stringify(highestRatings))
看看它是如何组织的。
对您的代码的一些评论:
您不需要使用聚合进行排序。
sort()
你可以在一个方法结束时背负find()
它,它会为你做这件事,就像这样:Review.find().sort({ 评级:-1 })
在您的第二个示例中,您将使用发送回的代码,
res.status(200).json()
但如果您希望它在前端呈现,您可能希望使用与.render()
第一个示例中使用的方法相同的方法,如下所示:res.status(200).render()
我希望这有帮助。如果我误解了这个问题,请发表评论。
推荐阅读
- angular - 如果用户使用反应形式在选择中选择特定元素,我如何返回空数组?
- javascript - React Application 单个 JS 文件的相同实例
- java - Spring Boot RewritePath 替换
- asp.net-core - Visual Studio 2019 Mac 不断要求 HTTPS 开发者证书
- css - 根据值更改行中的文本颜色 [SAPUI5]
- visual-studio - Visual Studio 远程调试身份验证问题
- databricks - Delta-Share : 调用 o31.load 时出错
- asp.net-core - OpenID Connect 与 ASP NET Core 3.1 没有众所周知的 URL
- javascript - 从动物数据库获得分页数据后,如何在反应前端访问我的数据?
- python - 在 tkinter 中使用网格的 gui 布局