【问题标题】:Nodejs Mongoose render two models from collectionsNodejs Mongoose 从集合中渲染两个模型
【发布时间】:2014-12-11 17:23:11
【问题描述】:

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

当我打开 /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


    【解决方案1】:

    这对我有用:

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

    });

    【讨论】:

      【解决方案2】:

      我认为我们应该首先在 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 
            });
         })
      }
      

      【讨论】:

        【解决方案3】:

        感谢您的回答。同时我为我的问题找到了另一种解决方案:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-13
            • 1970-01-01
            • 2016-06-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多