javascript - 如何从节点 js 中的 mongodb 查询中获取变量?
问题描述
我想从 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()
任何帮助,将不胜感激。
解决方案
Mongoose通过链接到最后来.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);
}
});
推荐阅读
- swift - 相机权限 Xcode 13
- django - 除非有限,否则 Django 查询性能很慢
- asp.net-core - ABP 身份验证响应缓慢
- python - 是否可以在打开检查时使用没有选择器的 python 和 selenium “单击”
- postgresql - 计数在 Postgresql 中显示不同的结果。想知道为什么
- regex - 寻找 SI 单位缩写与其完整拼写之间的逆映射
- javascript - 在discord.js bot中的client.commands.get上执行未定义的读取时不断收到错误
- r - 如何使用 group_by() 和 summarise() 来计算数据点的出现次数?
- javascript - 如何使用解析 JSON 在 Javascript 中显示用户列表
- google-chrome - 禁用的 Chrome 扩展程序可以访问哪些数据?