Nodejs Mongoose从集合中呈现两个模型



我希望标题能正确描述我的问题。

当我打开/admin/liste时,它应该呈现MongoDB数据库中的两个表。如何渲染两个或多个集合?

app.get('/admin/liste', isLoggedIn, function(req, res) {
    var List1 = mongoose.model('List1');
   // var List2 = mongoose.model('List2');
    List1.find(function (err, docs) {
        res.render('admin/liste',{
            firstlist : docs
        });
    });
    /*List2.find(function (err, docs) {
        res.render('admin/liste',{
            seclist : docs
        });
    });*/
});

编辑:我在参考资料中找不到任何关于我的问题的信息,这个问题是重复的。我没有使用任何Joins或类似的东西。我想显示清单1和清单2中项目的两个表。未注释的out代码运行良好,但这只是一个表,所以我必须将这两个表结合起来,然后呈现页面。

希望有人能帮我,谢谢。

您可以通过在第一个查询的回调中执行第二个查询来实现这一点,以便两个结果都可用于res.render调用:

app.get('/admin/liste', isLoggedIn, function(req, res) {
    var List1 = mongoose.model('List1');
    var List2 = mongoose.model('List2');
    List1.find(function (err, docs1) {
        List2.find(function (err, docs2) {
            res.render('admin/liste', {
                firstlist : docs1
                seclist : docs2
            });
        });
    });
});

感谢您的回答。与此同时,我找到了另一个解决问题的方法:

app.get('/admin/liste', isLoggedIn, function(req, res) {
    var List1 = mongoose.model('List1');
    var List2 = mongoose.model('List2');
    var List1Objects = List1.find({});
    var List2Objects = List2.find({});
    var resources = {
        firstlist: List1Objects.exec.bind(List1Objects),
        seclist: List2Objects.exec.bind(List2Objects)
    };
    async.parallel(resources, function (error, results){
        if (error) {
            res.status(500).send(error);
            return;
        }
        res.render('admin/liste', results);
    });
});

我认为我们应该首先在List1中找到项目,并将它们存储在一个变量中。然后在清单2中找到项目并呈现ej。类似这样的东西:

exports.someFunction = async (req, res) => {
   let List1 = mongoose.model('List1');
   let List2 = mongoose.model('List2');
   let itemsInList1 = await List1.find(); // store items in List1 in variable
   List2.find().then(itemsInList2 => {
      res.render('admin/liste', {
         firstlist : itemsInList1,
         secondList: itemsInList2 
      });
   })
}

这对我有效:

app.get('/admin/liste', function (req, res) {
  Registers.find({}, function (req1, res1) {
     Registers.find({}, function (req2, res2) {
        res.render('liste', {firstlist: res1, firstlist: res2});
    })
});

});

最新更新