Nodejs Mongoose从集合中渲染两个模型

问题描述 投票:0回答:3

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

当我打开/ 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
        });
    });*/
});

编辑:我在参考文献中找不到任何关于我的问题的信息,这个问题是多余的。我没有使用任何联接或类似的东西。我想从List1和List2中的项目中显示两个表。未注释的代码运行良好,但这只是一个表,所以我必须将这两个表合并,然后渲染页面。

希望有人能帮帮我,谢谢。

node.js mongodb mongoose render models
3个回答
2
投票

您可以通过在第一个查询的回调中执行第二个查询来执行此操作,以便两个结果都可用于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
            });
        });
    });
});

1
投票

谢谢您的回答。与此同时,我找到了解决问题的另一种解

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

0
投票

我认为我们应该首先在List1中找到项目并将它们存储在变量中。然后在List2中查找项目并渲染ejs。像这样的东西:

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 
      });
   })
}
© www.soinside.com 2019 - 2024. All rights reserved.