我正在使用本机驱动程序v2.1为mongo编写聚合函数。 我的代码看起来像这样:
db.collection("whatever").aggregate(...).each(function(err, doc) {
// cursor processing
})
我的问题是:光标处理在哪里执行?在客户端或服务器上? 我假设它是在客户端(节点)执行的,如果是这样的话,有没有办法在服务器上运行游标处理(或其他类型的数据处理)? / p>
我正在处理大量数据,而且我不想与mongo服务器来回传输。
THX!
答案 0 :(得分:1)
mongodb' mongodb'驱动程序的光标构造函数。
当' 每个 '(Cursor构造函数的原型方法)游标的方法被调用并传递回调函数,
callback(err, doc)
因此,需要注意的一点是 - 一旦从数据库接收到数据,构建数组并迭代它等等就会在应用程序结束时发生。加载和迭代数组可能是内存密集型的。调用者有责任确保整个结果集数组符合内存。不仅如此,还应考虑通过电线传输的数据量。
所以这是我的2美分..
在使用mongodb驱动程序处理大量数据的情况下,
最好设置批量大小'光标。例如,cursor1.batchSize(100, callback)
。设置游标的批量大小时,游标将从数据库中批量获取数据(上例中的100个文档),而不是一次性尝试获取完整的结果集。通过分批进行,它会消耗相对较少的内存和/或减少通过线路传输的数据量,从而获得更好的性能。
使用'投影'在查询中尽可能。同样,通过正确使用正确位置的投影,我们可以阻止不必要的数据传输到客户端。因此,处理大小的数据越少,内存越少,性能越好。
希望这些信息有用。
谢谢。