2016-07-20 13 views
1

は私の流星1.2.1プログラムがfind().forEach()ループでMongoError: cursor killed or timed outを投げたので、私はこのコードが防ぐと言うthis pageを発見した:MongoError:カーソル殺されたりタイムアウトになった - 流星のタイムアウト設定は無効

var myCursor = db.users.find().noCursorTimeout() 

しかし、driver docsそして私の流星は、そのメソッドが存在しないと言う:Object [object Object] has no method 'noCursorTimeout'

モンゴ自動再はenabled by defaultで、助けにはならなかった、またthis commentによるMeteor forum、あるいは.find({}, {timeout:false})をしました。方法「updateCollections」MongoErrorの呼び出し中に

2016年7月20日11時21分三十七秒更新は

2016年7月20日11時37分21秒例外を開始しました:カーソルが多分流星殺されたり

をタイムアウトしました2016-07-20 09:34:57に失敗したSOAPコールで混乱しましたか?

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

カーソルオブジェクトのmaxTimeMSメソッドが役立つと思いますか?あなたはそれを試しましたか? –

+0

'cursor.maxTimeMS(5000)'は 'Object [object Object]にはメソッド 'maxTimeMS'がありません。 Windows 10のMongoDBサーバー3.2はそれを理解していますが、Meteor 1.2.1はそれを理解していません。バージョンファイルは[email protected]だから私はそれを更新しようとします。 –

+0

mongoパッケージを再追加すると、Meteorバージョン[email protected]が保持されます。 –

答えて

1

maxTimeMSと仮定すると、あなたがrawCollectionオブジェクトの代わりに、流星のコレクション自体と協力してそれにアクセスすることができ、この場合に役立つだろう。

それは非常に簡単です:

var fetchCursor = Meteor.wrapAsync(function fetchCursor (cursor, cb) { 
    cursor.toArray(cb); 
}); 

けれども、私はこの方法が正確であるかどうかわからないです:fetchCursorはこのように実装することができ、簡単な繊維を意識したヘルパー関数です

var rawCollection = Meteor.users.rawCollection(); 
var cursor = rawCollection.find({}).maxTimeMS(5000); 
var myData = fetchCursor(cursor); 

あなたが探しているもの。

編集

例えば、あなたは文書の全体の配列を必要としませんが、あなたはそれらの一つ一つが独立して、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 ... 
    }); 
}); 
+0

メモリが重くないでしょうか?それで 'cursor.forEach'をどうすればいいのですか? –

+0

'myData.forEach()'は小さな辞書だけを含んでいるので動作します。 –

+0

そうでない場合: '致命的なエラー:避難配分が失敗しました - 処理中のメモリ' @ 'AppData¥Local¥.meteor¥packages¥meteor-tool¥1.1.10¥mt-os.windows.x86_32¥tools¥utils¥fiber- helpers.js:168'。しかし、それまでのタイムアウトはありません。 –

関連する問題