使用mongodb本机客户端和node.js流式传输整个集合

时间:2016-06-03 06:05:36

标签: javascript node.js mongodb stream

我正在拼命寻找一种使用node.js和本机mongodb驱动程序来传输整个集合的方法。我正在看这段代码:

var createAnalytics = function(db) {
  db.collection('changelog', function(err, changes) {
    assert.equal(null, err);

    var lastChange, index = 0;

    var changeCursor = changes
      .find({
        "activity": "patch",
        "entityOrRelationKind": "company",
        "customData._state": "published"
      })
      .sort({"userId": 1, "entityOrRelationId": 1})
      .stream();

    changeCursor.on('end', function() {
      console.log(index);
      db.close();
    });

    changeCursor.on('data', function(change) {
      index++;

      ...

      lastChange = change;
    });
  });
};

我得到的只是一个批次(在我的情况下是1000,但如果我将batchSize设置为5,我得到5)。我怎样才能获得下一批产品?我认为流API是为了遍历整个集合?我错过了什么?

提前一百万感谢

1 个答案:

答案 0 :(得分:0)

好吧,我自己发现了它,你们大多数人都很清楚,但为了完整起见:如果你在这种情况下使用像我这样的复合搜索查询,你还需要创建一个索引。否则mongo需要将整个集合加载到内存中,因此只返回大约1 MB的文档。

这仍然存在如何在上述情况下获得下一批的问题。任何人吗?