当前位置: 代码迷 >> JavaScript >> MongoDB:forEach vs fetch + each
  详细解决方案

MongoDB:forEach vs fetch + each

热度:135   发布时间:2023-06-12 13:52:18.0

当我想从我的Meteor应用程序迭代存储在MongoDB中的一些文档集时,我可以使用其中任何一个

db.collection.find( ... ).forEach( function f( doc ){ ... })

要么

var docs = db.collection.find( ... ).fetch();
_.each( docs, function f( doc ){ ... }); // using underscore.js

从性能的角度来看哪种方式更可取? 两种选择都有什么缺点和优点?

这两个语句在核心API级别基本相同,即获取光标并转换结果。 然而,性能有一个“核心”差异:

  • .forEach()将“一次一个”转换游标结果并处理它提供的迭代器函数。

  • .fetch()从光标“all all”获取“数组”,这意味着它在一次命中中全部“在内存中”。

所以无论如何,在从查询的光标获取“核心”操作时,实际上“更快”。 但是,不评估每个游标迭代的“表达式”可能会“稍微快一些”,因此.fetch()可能在这里赢得“小”。

当然,最重要的是“现在一切都在记忆中”,因此需要考虑“开销”。 同样,在.fetch()_.each()还没有被处理,所以俗话说。 “你在环形交叉路口可能”松动“的摆动中获得了什么”

如果没有对特定案例进行全面基准测试,“时间”可能会相似。 除非专门应用您正在使用的数据集的大小,否则通用基准测试几乎无用。

因此,一般情况下, “大致相同” ,但是使用.fetch()会比从一开始就迭代游标消耗更多的内存

  相关解决方案