Javascript MongoError:光标被杀死或超时-流星超时设置无效
我的Meteor 1.2.1程序在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-
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
。我按照你的建议添加了一个每个的示例。