我是 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**
}
但是当使用 .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 **
}
我做错了什么?
最佳答案
find() 和 exec() 有两个不同的用途。
find()方法是数据库READ操作启用函数。这是
存在于 Node 的 native mongodb 驱动程序以及内部使用 mongodb 驱动程序的 Mongoose 库中,对于强加固定模式特别有用。
现在,在 mongodb 驱动程序中,如果您使用 find(query)
,查询会自动执行,而在 mongoose 中则不会。我们需要辅助函数/回调来执行操作。
exec 就是这样的辅助函数之一。
它类似于:myPlaylist.findOne({'singer':'Adam Levine'}).exec()
Mongoose 查询不是 promise 。为了方便起见,它们有一个 .then() 函数。
如果您需要完整的 promise ,请使用 .exec() 函数。
因此,您可以执行 myPlaylist.findOne({'singer':'Adam Levine'}).then()
但这会返回 Mongoose/BlueBird(又一个库) promise 和典型的 JavaScript promise 。
注意:exec() 采用可选的回调函数。只有当您不使用回调时,您才会收到 Promise。
关于node.js - Mongoose 查找与执行。如何返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50932847/