クエリカーソル
QueryCursor()
QueryCursor.prototype.addCursorFlag()
QueryCursor.prototype.close()
QueryCursor.prototype.eachAsync()
QueryCursor.prototype.getDriverCursor()
QueryCursor.prototype.map()
QueryCursor.prototype.next()
QueryCursor.prototype.options
QueryCursor.prototype.rewind()
QueryCursor.prototype[Symbol.asyncIterator]()
QueryCursor()
パラメータ
query
«クエリ»options
«オブジェクト» `クエリ` オプションは `.find()` に渡されます
継承
クエリカーソルは、クエリ結果を一度に1つのドキュメントずつ処理するための並行処理プリミティブです。クエリカーソルは、MongoDBからドキュメントを1つずつロードするための他のいくつかのメカニズムに加えて、Node.js streams3 APIを満たします。
クエリカーソルは、MongoDBからドキュメントを読み込む前にモデルのpre `find`フックを実行し、各ドキュメントを読み込んだ後にモデルのpost `find`フックを実行します。
上級ユーザーでない限り、このクラスを直接インスタンス化しないでください。代わりにQuery#cursor()
を使用してください。
QueryCursor.prototype.addCursorFlag()
パラメータ
flag
«文字列»value
«真偽値»
戻り値
- «アグリゲーションカーソル» this
カーソルフラグを追加します。 `noCursorTimeout`および`tailable`フラグの設定に役立ちます。
QueryCursor.prototype.close()
戻り値
- «Promise»
参照
このカーソルを閉じられたとしてマークします。ストリーミングを停止し、後続の`next()`の呼び出しはエラーになります。
QueryCursor.prototype.eachAsync()
パラメータ
fn
«関数»[options]
«オブジェクト»[options.parallel]
«数値» 並列に実行するPromiseの数。デフォルトは1です。[options.batchSize]
«数値» 設定されている場合、最大`batchSize`の長さのドキュメントの配列を使用して`fn()`を呼び出します[options.continueOnError=false]
«真偽値» trueの場合、`fn`がエラーをスローした場合でも、`eachAsync()`はすべてのドキュメントを反復処理します。 falseの場合、指定された関数`fn()`がエラーをスローすると、`eachAsync()`はすぐにエラーをスローします。
戻り値
- «Promise»
カーソルのすべてのドキュメントに対して`fn`を実行します。 `fn`がPromiseを返す場合、次のドキュメントに進む前にPromiseが解決するのを待ちます。完了したら解決するPromiseを返します。
例
// Iterate over documents asynchronously
Thing.
find({ name: /^hello/ }).
cursor().
eachAsync(async function (doc, i) {
doc.foo = doc.bar + i;
await doc.save();
})
QueryCursor.prototype.getDriverCursor()
このカーソルが使用するMongoDBノードドライバーから、基になるカーソルを返します。
QueryCursor.prototype.map()
パラメータ
fn
«関数»
戻り値
- «クエリカーソル»
ストリームインターフェースまたは`.next()`を介して取得されたドキュメントを後でマップする変換関数を登録します
例
// Map documents returned by `data` events
Thing.
find({ name: /^hello/ }).
cursor().
map(function (doc) {
doc.foo = "bar";
return doc;
})
on('data', function(doc) { console.log(doc.foo); });
// Or map documents returned by `.next()`
const cursor = Thing.find({ name: /^hello/ }).
cursor().
map(function (doc) {
doc.foo = "bar";
return doc;
});
cursor.next(function(error, doc) {
console.log(doc.foo);
});
QueryCursor.prototype.next()
戻り値
- «Promise»
このカーソルから次のドキュメントを取得します。ドキュメントが残っていない場合は`null`を返します。
QueryCursor.prototype.options
タイプ
- «プロパティ»
`QueryCursor`コンストラクターに渡された`options`。
QueryCursor.prototype.rewind()
戻り値
- «アグリゲーションカーソル» this
このカーソルを初期化されていない状態に巻き戻します。カーソルに存在するオプションはすべて有効なままです。このカーソルを反復処理すると、結果のデータがこのカーソルによって既に取得されている場合でも、サーバーに新しいクエリが送信されます。
QueryCursor.prototype[Symbol.asyncIterator]()
`for/await/of`ループで使用するasyncIteratorを返します。この関を明示的に呼び出す必要はありません。JavaScriptランタイムが自動的に呼び出します。
例
// Works without using `cursor()`
for await (const doc of Model.find([{ $sort: { name: 1 } }])) {
console.log(doc.name);
}
// Can also use `cursor()`
for await (const doc of Model.find([{ $sort: { name: 1 } }]).cursor()) {
console.log(doc.name);
}
Node.js 10.xは、フラグなしでasyncイテレーターをネイティブにサポートしています。`--harmony_async_iteration`フラグを使用して、Node.js 8.xでasyncイテレーターを有効にできます。
**注:** `Symbol.asyncIterator`が未定義の場合、この関数は機能しません。 `Symbol.asyncIterator`が未定義の場合、Node.jsバージョンがasyncイテレーターをサポートしていないことを意味します。