这些查询之间有区别吗?我很想知道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));
答案 0 :(得分:7)
第一个示例将在MongoDB服务器(具有内置JS运行时)的上下文中执行映射,第二个示例将在您的Node进程中在本地执行它。
.toArray()
的位置是关键:它会耗尽光标,换句话说,它会将结果文档集从服务器传输到客户端。
因此cursor.toArray().map()
将首先将所有文档传输到客户端,映射将在那里进行,cursor.map().toArray()
将在服务器上的每个文档上执行映射,然后将所有文件转移到客户端。