gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:26 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com