【问题标题】:mongodb .toArray vs .each (blocking vs async?)mongodb .toArray vs .each(阻塞 vs 异步?)
【发布时间】:2016-12-12 05:47:12
【问题描述】:
我的问题是以下哪个是阻塞的,因此不推荐用于 nodejs
db.collection("allinfo").find({somekey: "someval"}).each(function(err, item){ //we get each item.... });
db.collection("allinfo").find({somekey: "someval"}).toArray(function(err, allitems){ //we get whole array.... });
应该首选哪一个以及何时?
【问题讨论】:
标签:
javascript
node.js
mongodb
performance
loops
【解决方案1】:
所以,这里真正的区别是稀疏的,而且很大程度上取决于你的情况。
db.collection("allinfo").find({somekey: "someval"})
这里主要是这个^。 find 打开一个游标,它并没有那么重。它实际上非常快——下一部分,使用toArray 或each 都是读取光标。
根据我的经验,当结果计数被忽略时,我使用each——我不需要它。当打开的光标的长度对所讨论的算法至关重要时,或者如果我将它传递给另一个处理数组的函数,而不是处理每个单独项目的函数,我会使用 toArray。
这些项目都不是阻塞的,mongo 在 nodejs 的异步事件循环中本机运行。必须手动强制光标同步,不推荐。