My Meteor 1.2.1程序在MongoError: cursor killed or timed out
循环中抛出了find().forEach()
,因此我发现this page表示此代码可以阻止:{/ p>
var myCursor = db.users.find().noCursorTimeout()
然而,driver docs和我的Meteor说该方法不存在:Object [object Object] has no method 'noCursorTimeout'
Mongo autoReconnect为enabled by default但没有帮助,Meteor forum,甚至this comment的{{3}}也没有帮助。
2016-07-20 11:21:37更新开始
2016-07-20 11:37:21调用方法'updateCollections'时出现异常MongoError:游标被杀或超时
也许Meteor在2016-07-20 09:34:57失败的SOAP调用感到困惑?
.find({}, {timeout:false})
答案 0 :(得分:1)
假设maxTimeMS
在这种情况下有帮助,您可以通过使用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);
});
虽然,我不确定这种方法是否正是您正在寻找的。 p>
修改强>
如果您不需要整个文档数组但想要独立处理每个文档,最好使用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 ...
});
});