MongoDB query cursor
普通のfindではさばけない、大量のdocumentを1つずつ処理していく為のMongoDBのしくみ
https://www.mongodb.com/ja-jp/docs/manual/core/cursors/
メモリに乗り切らない
取得に時間がかかる
最新のdocumentを読み出してすぐ書き直したい
などの場合に使う
batch処理とか
mongoose 6あたりからの使い方
mongoose 6以降ではcursor()呼び出さずにqueryを直接for await...ofで回せる
使い分け、プラクティス
mongooseのfind query cursorは色々な回し方があるけどどれ使えばいいの?
MongoDBのCursor not foundエラーやnoCursorTimeoutオプションとの向き合い方
MongoDBのcursorで出てくるdocumentは、読み出し時点で古い内容になっている可能性がある
mongoose 6未満での書き方
http://mongoosejs.com/docs/api.html#cursor-QueryCursor-js
model.find(query).cursor()
node 12以前
次のページを取得
const doc = await cursor.next()
最後まで来たらnullが返る
node 12以降
mongo query cursorはfor awaitで回せる
mongoose 6以上での書き方
mongoose 6以降ではcursor()呼び出さずにqueryを直接for await...ofで回せる