forEach() (カーソルの反復)

最終更新:2026-10-09

forEach() (カーソルの反復)

forEach() はカーソル内のすべてのドキュメントに対してコールバックを実行します。例: `db.users.find().forEach(function(doc) { print(doc.name) })`。toArray() のようにすべてをメモリにバッファリングせず、取得しながら処理するため、大規模な結果セットに適したストリームフレンドリーな選択肢です。コールバックで収集、集計、ログ出力ができ、バッチジョブの定番です。

カテゴリカーソル
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

db.<collection>.find(<filter>).forEach(<callback>)

⚙️ パラメータ

コールバック関数各ドキュメントを受け取る関数(例: function(doc) { print(doc.name) })。

戻り値:undefined(コールバックはサーバーのドキュメントストリーム上で実行されます)。

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// forEach: ストリーム処理しながら大人の人数を数える
let n = 0
db.users.find({ age: { $gte: 18 } }).forEach(doc => {
  n++
})
print(n)

出力:

Alice
Bob
Processed: 2

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

QforEach と toArray ではどちらがメモリ消費が少ないですか?
AforEach() は取得しながら処理するためメモリ消費が少ないです。toArray() はすべてをメモリに読み込むため、大きなセットではコストがかかります。
QforEach のコールバックでドキュメントを変更できますか?
Aコールバックが受け取るのはコピーです。編集は永続化されません。変更を書き込むにはコールバック内で更新操作を呼びます。
QforEach を途中で抜けられますか?
AforEach には break がありません。条件付きで抜けるには next() で手動ループするか、先に limit() で件数を制限します。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%