Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
当与Node.js一起使用时,MongoDB游标如何工作?_Node.js_Mongodb - Fatal编程技术网

当与Node.js一起使用时,MongoDB游标如何工作?

当与Node.js一起使用时,MongoDB游标如何工作?,node.js,mongodb,Node.js,Mongodb,我在npm包mongodb中使用Node.js。当我使用findOne…,我会得到一个直接是我搜索的项目的结果。当我使用find。。。相反,我没有得到一个元素数组,我得到一个光标,如果你使用console.log,它看起来很奇怪 我的问题是为什么它返回一个游标而不是元素数组,并且是游标。。。然后调用asynchronous,或者客户端如何从游标中获取数据?它返回游标而不是数组,从而为客户端提供灵活性,以满足其需要的任何最佳方式访问结果 要获取所有结果的数组,可以调用游标上的async方法: co

我在npm包mongodb中使用Node.js。当我使用findOne…,我会得到一个直接是我搜索的项目的结果。当我使用find。。。相反,我没有得到一个元素数组,我得到一个光标,如果你使用console.log,它看起来很奇怪


我的问题是为什么它返回一个游标而不是元素数组,并且是游标。。。然后调用asynchronous,或者客户端如何从游标中获取数据?

它返回游标而不是数组,从而为客户端提供灵活性,以满足其需要的任何最佳方式访问结果

要获取所有结果的数组,可以调用游标上的async方法:

collection.find({...}).toArray((err, docs) => {...});
聚合的情况也是如此:


和普通光标。forEach。。。代码也在做同样的事情,但是一个接一个地给出结果,对吗?它也是异步的,所以我基本上需要等待两次服务器的响应?是的,forEach也是异步的,一次提供一个文档。但是find同步返回游标,所以您不必等待它。聚合没有这样的功能。在那里,它返回一个游标,我必须等待2次。当我知道只有一个结果时,这不是性能开销吗?我不能在请求中告诉您我只需要数据而不需要游标吗?实际上,聚合也是如此。看看更新的答案。啊,我才明白你的真正意思。我以为你会等一等,等一等再等。但是您在第一个请求中完成了所有这些,因此您只需等待一次。非常感谢,约翰尼:
collection.aggregate([{$match: {...}}]).toArray((err, docs) => {...});