node.js - Mongoose 查找与执行。如何返回值?

标签 node.js mongodb express mongoose

我是 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/

相关文章:

java - 我可以使用 JNDI 共享 MongoClient 实例吗?

javascript - 使用现有值更新字段

node.js - 我应该为 express.cookieParser() secret 使用什么?

node.js - Mongoose 查询缺少(或未定义)字段的位置

javascript - 在 PhantomJS 中从站点上的 Ajax 请求获取状态代码

python - 如何在 pymongo 中禁用 '_id'

node.js - 使用 nodejs express curl - POST 数据

node.js - Loopbackjs 自定义方法未显示在关系中

node.js - 如何知道 Node js 是否安装了特定的 Windows 服务?

node.js - 在 nodejs 中使用 expressjs、mongoosejs 和 redis 在哪里编写业务逻辑