Bel*_*ain 4 mongoose mongodb node.js express
我是 Node 的新编程人员,我被卡住了,因为我不明白 .find 和 .exec 之间的区别。这是我尝试运行的代码:
exports.getPopulatedUsers = async function(query){
var res = await users.find(query, function (err, docs) {
if(err) return err;
return docs;
});
return res; // **Work fine, res return docs**
}
Run Code Online (Sandbox Code Playgroud)
但是当用 .exec 执行时, res 是未定义的。
exports.getPopulatedUsers = async function(query){
var res = await users.find(query).exec(function (err, docs) {
if(err) return err;
return docs;
});
return res; // **ERROR, res is undefined **
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
小智 7
find() 和 exec() 有两个不同的目的。
find() 方法是一个数据库READ 操作启用函数。它存在于 node 的本机 mongodb 驱动程序以及内部使用 mongodb 驱动程序的 Mongoose 库中,并且对于强加固定模式特别有用。
现在,在 mongodb 驱动程序中,如果您使用find(query),查询将自动执行,而在 mongoose 中则不会。我们需要辅助函数/回调来执行操作。exec 就是这样一种辅助函数。它类似于:myPlaylist.findOne({'singer':'Adam Levine'}).exec()
Mongoose 查询不是承诺。为方便起见,它们有一个 .then() 函数。
如果您需要一个成熟的承诺,请使用 .exec() 函数。
所以,你可以做一个myPlaylist.findOne({'singer':'Adam Levine'}).then()但会返回一个 Mongoose/BlueBird(又一个库)承诺和一个典型的 JavaScript 承诺。
注意:exec() 接受一个可选的回调函数。只有当您不使用回调时,您才会返回 Promise。
| 归档时间: |
|
| 查看次数: |
5528 次 |
| 最近记录: |