我是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 **
}
我在做什么错?谢谢你。
答案 0 :(得分:0)
您不能将承诺与猫鼬中的回调混在一起:
exports.getPopulatedUsers = async function(query){
var docs = await users.find(query).exec();
return docs;
}
关于exec和find之间的区别是什么,请阅读注释部分中的链接,它们非常清楚。
答案 1 :(得分:0)
find()和exec()有两个不同的用途。
find()方法是启用数据库READ操作的功能。它是
既存在于用于节点的本地mongodb驱动程序中,又存在于内部使用mongodb驱动程序的Mongoose库中,并且对于强加固定模式特别有用。
现在,在mongodb驱动程序中,如果您使用find(query)
,则会自动执行查询,就像在mongoose中一样。我们需要帮助函数/回调来使操作执行。
exec是此类帮助程序功能之一。
它类似于:myPlaylist.findOne({'singer':'Adam Levine'}).exec()
猫鼬查询不是承诺。为了方便起见,它们具有.then()函数。
如果您需要完整的承诺,请使用.exec()函数。
因此,您可以执行myPlaylist.findOne({'singer':'Adam Levine'}).then()
,但这将返回Mongoose / BlueBird(还有另一个库)promise和典型的JavaScript。
注意:exec()具有可选的回调函数。只有在不使用回调的情况下,您才能获得Promise。