mongodb .toArray vs .each(blocking vs async?)

时间:2016-12-12 05:47:12

标签: javascript node.js mongodb performance loops

我的问题是以下哪项是阻止的,因此不推荐用于nodejs

  1. db.collection("allinfo").find({somekey: "someval"}).each(function(err, item){ //we get each item.... });
  2. db.collection("allinfo").find({somekey: "someval"}).toArray(function(err, allitems){ //we get whole array.... });
  3. 哪一个应该首选?何时?

1 个答案:

答案 0 :(得分:0)

所以,真正的区别在于稀疏,而且非常依赖于你的情况。

db.collection("allinfo").find({somekey: "someval"})

这里的主要是^。 find打开一个光标,这并不是那么重。它实际上非常快 - 下一部分,使用toArrayeach都是读取光标。

根据我的经验,当结果的计数无效时,我使用each - 我不需要它。当打开的游标的长度对于所讨论的算法至关重要时,或者如果我将其传递给处理数组的另一个函数,而不是处理每个单独项目的函数时,我使用toArray

这些项都没有阻塞,mongo在nodejs的异步事件循环中本机运行。您必须手动强制光标执行同步,这是不推荐的。