Javascript MongoError:光标被杀死或超时-流星超时设置无效

Javascript MongoError:光标被杀死或超时-流星超时设置无效,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我的Meteor 1.2.1程序在find().forEach()循环中抛出MongoError:cursor被杀死或超时,因此我发现这段代码可以防止: var myCursor = db.users.find().noCursorTimeout() 然而,和我的流星说方法不存在:Object[Object Object]没有方法'noCursorTimeout' Mongo autoReconnect是并且没有帮助,也没有,甚至没有根据找到({},{timeout:false}) 2016-

我的Meteor 1.2.1程序在
find().forEach()
循环中抛出
MongoError:cursor被杀死或超时
,因此我发现这段代码可以防止:

var myCursor = db.users.find().noCursorTimeout()
然而,和我的流星说方法不存在:
Object[Object Object]没有方法'noCursorTimeout'

Mongo autoReconnect是并且没有帮助,也没有,甚至没有根据找到({},{timeout:false})

2016-07-20 11:21:37更新开始

2016-07-20 11:37:21调用方法“updateCollections”时出现异常MongoError:游标被终止或超时

也许Meteor被2016-07-20 09:34:57失败的SOAP呼叫弄糊涂了

  "error": {
    "errno": "ETIMEDOUT",
    "syscall": "connect",
    "code": "ETIMEDOUT"
  },

假设
maxtimes
在这种情况下会有所帮助,您可以通过使用
rawCollection
对象而不是Meteor集合本身来访问它

很简单:

var rawCollection = Meteor.users.rawCollection();
var cursor = rawCollection.find({}).maxTimeMS(5000);
var myData = fetchCursor(cursor);
其中,
fetchCursor
是一个简单的光纤感知辅助功能,可以这样实现:

var fetchCursor = Meteor.wrapAsync(function fetchCursor (cursor, cb) {
  cursor.toArray(cb);
});
尽管如此,我不确定这种方法是否正是您想要的

编辑

如果您不需要整个文档数组,但希望独立处理其中的每一个文档,则最好使用
each
,而不是
toArray
,例如

var fetchCursor = Meteor.wrapAsync(function fetchCursor (cursor, cb) {
  cursor.each(function (err, doc) {
    if (err) return cb(err);
    if (!doc) return cb(null, { done: true }); // no more documents
    // do something with the document ...
  });
});

您认为cursor对象的
maxtimes
方法会有帮助吗?你试过了吗?
cursor.maxTimeMS(5000)
导致
Object[Object Object]没有方法“maxtimms”
。Windows10上的MongoDBServer3.2理解这一点,但Meteor1.2.1不理解。版本文件说mongo@1.1.3因此,我将尝试更新它。重新添加mongo包将保留Meteor版本mongo@1.1.3.Won那不是记忆犹新吗?我如何使用它来创建一个
游标.forEach
myData.forEach()
工作,因为它只包含小字典。或者不工作:
致命错误:疏散分配失败-内存不足处理
AppData\Local\.meteor\packages\meteor tool\1.1.10\mt os.windows.x86\u 32\tools\utils\fiber helpers.js:168
。不过,在那之前没有超时。你可以使用
每个
@ceestimerman,而不是
toArray
。我按照你的建议添加了一个
每个
的示例。