提问者:小点点

如何从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行)时,它显示未定义。


共1个答案

匿名用户

使用exec()async/await的允诺形式来避免回调地狱(这在规范问题“如何从异步调用返回响应?”中有说明):

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 });
});