cursor.map()。toArray()与cursor.toArray()。then(array => array.map())

时间:2016-05-04 10:17:54

标签: javascript node.js mongodb

这些查询之间有区别吗?我很想知道mongo如何解释传递给map方法的javascript代码与映射解析后的映射。

db.collection('myCollection').find()
.map(document => document.value + 3)
.toArray();

VS

db.collection('myCollection').find()
.toArray()
.then(array => array.map(document => document.value + 3));

1 个答案:

答案 0 :(得分:7)

第一个示例将在MongoDB服务器(具有内置JS运行时)的上下文中执行映射,第二个示例将在您的Node进程中在本地执行它。

.toArray()的位置是关键:它会耗尽光标,换句话说,它会将结果文档集从服务器传输到客户端。

因此cursor.toArray().map()将首先将所有文档传输到客户端,映射将在那里进行,cursor.map().toArray()将在服务器上的每个文档上执行映射,然后将所有文件转移到客户端。