我想从node.js中的mongodb查询中获取一个变量,该变量将计算名为students
的集合中的文档数
我试图在查询之前声明一个全局变量,并试图在查询函数中分配值:
router.get('/dashboard', loggedin, function (req, res, next) {
// Student is a db object of a collection named students
var std_count
Student.find(function(err, doc) {
if(err) console.log(err)
else {
std_count = doc.length
}
})
console.log(std_count)
res.render('dashboard', {
user:req.user
})
});
console.log()
总是打印undefined
,但是如果我将console.log()
放在else{}
块中,它将打印正确的结果。
我还需要再执行4个这样的查询(例如老师,课程等),并将它们一起发送到res.render()
任何帮助将不胜感激。
答案 0 :(得分:1)
猫鼬.find
通过将.exec
链接到末尾来返回承诺,
router.get('/dashboard', loggedin, function (req, res, next) {
// Student is a db object of a collection named students
Student.find({})
.exec()
.then(data => {
const std_count = data.length;
res.render('dashboard', {
user:req.user
});
})
.catch(err => res.status(500));
});
更新:
然后,您可以使用await每个查询并将它们最后发送到res.render
。
router.get('/dashboard', loggedin, async function (req, res, next) {
try {
const std_count = (await Student.find({}).exec()).length || 0;
const teachers_count = (await Teachers.find({}).exec()).length || 0;
const courses_count = (await Courses.find({}).exec()).length || 0;
return res.render('dashboard', {
user: req.user,
studentCount: std_count,
teacherCount: teachers_count,
coursesCount: courses_count
});
} catch (err) {
return res.status(500);
}
});