node.js - 如何根据 MongoDB 数据库中的键获取多个结果?
问题描述
我想根据一些键从 MongoDB 获取多个结果。
下面是我的代码:
router.get('/',function(req, res, next) {
var movie = movieModel.find({category:"movies"});
var sports = movieModel.find({category:"sports"});
var news = movieModel.find({category:"news"});
var cartoon = movieModel.find({category:"cartoons"});
var moviesData;
var sportsData;
var newsData;
var cartoonData;
movie.exec(function(err,data){
if(err) throw err;
console.log(data);
moviesData = data;
});
sports.exec(function(err,data){
if(err) throw err;
else {
sportsData = data;
}
})
news.exec(function(err,data){
if(err) throw err;
else {
newsData = data;
}
})
cartoon.exec(function(err,data){
if(err) throw err;
else{
cartoonData = data;
}
})
console.log(moviesData); // line 1
console.log(sportsData);// line 2
console.log(newsData);// line 3
console.log(cartoonData);// line 4
res.render('home', {admin:false,data:moviesData });
});
在这里,当我在函数 (name.exec()) 内控制台数据时,它会显示正确的输出,但是当我在外部控制台时(如第 1 行、第 2 行、第 3 行、第 4 行),它显示未定义。
解决方案
使用, 和/的承诺形式exec()
async
await
将自己从回调地狱中拯救出来(在规范问题How do I return response from asynchronous call?中另有说明):
router.get("/", async function (req, res, next) {
var moviesData = await movieModel.find({ category: "movies" }).exec();
var sportsData = await movieModel.find({ category: "sports" }).exec();
var newsData = await movieModel.find({ category: "news" }).exec();
var cartoonData = await movieModel.find({ category: "cartoons" }).exec();
console.log(moviesData);
console.log(sportsData);
console.log(newsData);
console.log(cartoonData);
res.render("home", { admin: false, data: moviesData });
});
推荐阅读
- c++ - 在 dll 中调用函数,同时在其中包含 dll/lib 文件
- coq - 为什么在相当简单的情况下无法进行案例分析
- python - 输出到终端和输出到文件得到不同的结果
- rest - 即使在 GET 请求中,我们也可以使用 SCIM 属性的“请求”可返回属性吗?
- routes - 如何在动态 nuxt.js 路由中的另一个 _slug 目录中使用 _slug?
- assembly - 包括另一个文件的程序集不起作用
- spring-security - 集成 Spring-session 和 Spring-security 会导致登录错误屏幕丢失 SPRING_SECURITY_LAST_EXCEPTION
- powerbi - 在 CAlculate 函数中使用 OR( || ) 不起作用
- python - 如何用skopt做超参数
- amazon-web-services - 以 http 端点为目标时,http 动词 kinesis firehose 使用什么?