この問題はmongodbで直面しています。 私のコードは、この集約ピンプラインエラー:getMore:サーバー上にカーソルが存在しませんでした。再起動またはタイムアウトが発生する可能性があります。
for(loop) {
var cursorQuery = db.beacon_0000.aggregate([
{
$match: {
...
}
},
{
$project: {
...
}
},
{
$group: {
...
}
},
{
$sort: {
...
}
}
], {allowDiskUse: true});
...
while(cursorQuery.hasNext()) {
var cursor = cursorQuery.next();
...
}
}
のようなもので、私はカーソルが行のcursorQueryでサーバーエラーに存在しませんでした取得しばらく
$ mongo dbName file.js
としてコマンドとモンゴシェルを経由して上記のクエリを実行します。 hasNext()。私はこのエラーを取得する場合は、検索クエリで
は、私はしかし、このオプションは、私はこの問題を解決または回避策ことができますどのように教えてください集計
で利用可能ではないようですaddOption(DBQuery.Option.noTimeout)
を追加することで解決することができます。ただ、追加のアップデートを提供するために、
: 私は
var cursor = db.collection..aggregate([ ...], {allowDiskUse: true}).addOption(DBQuery.Option.noTimeout)
を使用すると言うとき、私はこのエラー E QUERY TypeError例外を取得します。オブジェクトの#は何のメソッド 'addOption'
を持っていない私は
を使用すると言うしかし、ときvar cursor = db.collection..find({...}, {...}).addOption(DBQuery.Option.noTimeout)
正常に動作します。なしありアグリゲーションパイプライン動作
の最終段階で作成されたドキュメントにカーソルそしてチェックカーソルドキュメント https://docs.mongodb.com/v3.0/reference/method/cursor.addOption/#cursor.addOption
: 戻り値:集計DOC https://docs.mongodb.com/v3.0/reference/method/db.collection.aggregate/ それが言うの確認
集約カーソルがfindカーソルと異なること、そして前者がDBQuery.Option.noTimeoutをサポートしていないことを示唆しています。
これはmongodbにバグがあります。それを修正する方法や回避策があります。
注意MongoDBのバージョンは、あなたがソートの自分でこれを答えている3.0
ここに私のオプションは何ですか? batchSizeを大きな値に設定すると、ここで役立ちます。 say db.collection.aggregate().batchSize(10000) カーソルが集約パイプラインのタイムアウトにならないようにするには、他に何かお勧めします。 –
集計時間を短縮する人は、あなたが望むものです。 'cursor'がタイムアウトするのを防ぐことができないと考えると、デフォルトのタイムアウトの長さ内で使用する必要があります。彼らはこれを修正しようとしているように見えます。参照:https://jira.mongodb.org/browse/SERVER-6036 – AJenkins