首页 > 解决方案 > 如何根据 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 行),它显示未定义。

标签: node.jsmongodbexpress

解决方案


使用, 和/的承诺形式exec()asyncawait将自己从回调地狱中拯救出来(在规范问题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 });
});

推荐阅读