Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS的MongoDB驱动程序aggregate()和find()的承诺_Javascript_Node.js_Mongodb_Promise - Fatal编程技术网

Javascript NodeJS的MongoDB驱动程序aggregate()和find()的承诺

Javascript NodeJS的MongoDB驱动程序aggregate()和find()的承诺,javascript,node.js,mongodb,promise,Javascript,Node.js,Mongodb,Promise,我经常读到NodeJS的MongoDB驱动程序(>2.0)支持承诺。但我找到的唯一例子是connect()和findOne()函数。虽然它适用于这些,而且我可以得到承诺,但它不适用于aggregate()或find()。我明白这是因为他们可能会返回游标,但既然有承诺支持,那些承诺在哪里?一定有办法和他们合作。欢迎提供链接、示例或简单解释:) 谢谢,, Jordy.您可以编写自己的自定义承诺函数,例如: Query.prototype.find = function (callback) {

我经常读到NodeJS的MongoDB驱动程序(>2.0)支持承诺。但我找到的唯一例子是connect()和findOne()函数。虽然它适用于这些,而且我可以得到承诺,但它不适用于aggregate()或find()。我明白这是因为他们可能会返回游标,但既然有承诺支持,那些承诺在哪里?一定有办法和他们合作。欢迎提供链接、示例或简单解释:)

谢谢,,
Jordy.

您可以编写自己的自定义承诺函数,例如:

Query.prototype.find = function (callback) {
  return new Promise((resolve, reject) => {
    this.model.find(this.query).skip(this.skip).limit(this.limit).sort(this.sort).exec((err, results) => {
        if (err) {
            return reject(err);
        }

        return resolve({ find: results });
    });
  });
}

将结果从
find()
aggregate()
链接到
.toArray()
。当前mongodb nodejs驱动程序的
toArray
文档是。

因为
.find()
.aggregate()
返回一个(从技术上讲
.aggregate()
有点不同),它实际上是节点流的一种扩展形式。如果你想要数据,你可以用承诺来解决,那么你需要类似的东西。点是“默认”
光标
用于“大”结果,您可以使用“数组”结构“选择性”变小。像mongoose这样的东西是“自动”为你做的。谢谢@NeilLunn,这正是我想要的:)没有
.exec()
方法。您查找了与普通本机驱动程序不同的驱动程序。您还可以尝试使用aggregate().exec(),它将返回一个承诺