我希望标题能正确描述我的问题。
当我打开/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});
})
});
});