【问题标题】:MongoError: cursor killed or timed outMongoError:光标被杀死或超时
【发布时间】:2016-08-25 19:39:57
【问题描述】:

我正在尝试通过流式传输、暂停、处理和恢复来处理 MongoDB 数据库中的数据。每个文档的处理最多可能需要 2-3 分钟,每个文档都由集群中的工作人员完成。我在master 中流式传输文档,然后将文档发送到workers 进行处理。问题是我在流中收到错误MongoError: cursor killed or timed out 20-30 分钟(或大约 10 多个文档)。之前处理时间低于这个的时候,我已经成功使用过这个方法了。

配置: node-mongodb-native@1.4.40,mongodb version 3.0.5,node 0.10

MongoClient.connect(config.mongodb, function(err, db) {
  if (err) helper.logError(err)
  var collection = db.collection('collectionName');
  stream = collection.find(condition).stream();
  stream.on("data", function(doc) {
    stream.pause();
    doSomeProcessing().then(function(){
      stream.resume()
    });
  });
});

【问题讨论】:

  • 您好,您的问题解决了吗?
  • 不,我重新设计了查询方式。

标签: mongodb node-mongodb-native


【解决方案1】:

您可以通过调用addCursorFlag'noCursorTimeout' 标志添加到find() 返回的游标来禁用游标超时:

stream = collection.find(condition).addCursorFlag('noCursorTimeout', true).stream();

【讨论】:

  • 驱动版本 1.4 没有那个标志,它有一个超时选项,但这不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2010-12-08
  • 2013-01-05
  • 2018-03-18
  • 1970-01-01
相关资源
最近更新 更多