watch() (コレクションの変更監視)
最終更新:2026-10-09
watch() (コレクションの変更監視)
watch() はコレクションの変更を監視し、Change Stream を返します。例: `db.users.watch([{ $match: { 'operationType': 'insert' } }])`。すべての挿入、更新、削除、置換が変更イベントを発生させます。レプリカセットまたはシャーディングクラスタが必要で、スタンドアロンサーバーではサポートされません。典型的な用途はリアルタイム同期、キャッシュ無効化、監査ログです。
| カテゴリ | インデックスと管理 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.watch(<pipeline>, { fullDocument: 'updateLookup' })
⚙️ パラメータ
| パイプライン配列 | 任意。変更イベントを絞り込む集約パイプライン。 |
|---|---|
| fullDocument | 任意。'updateLookup' は更新イベントに完全なドキュメントを添付します。 |
戻り値:反復または待ち受けが可能なチェンジストリームカーソル。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// watch: users への挿入を監視する
const stream = db.users.watch([
{ $match: { 'operationType': 'insert' } }
])
stream.forEach(ev => print('New user: ' + ev.fullDocument.name))
出力:
New user: Alice
New user: Bob
📌 注意事項
- レプリカセットとシャーディングクラスタのみ。スタンドアロンでは不可
- 変更イベントはサーバー側の oplog に永続化される
- イベントが再配信される可能性があるため、ハンドラは冪等にする
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Qwatch はスタンドアロンの MongoDB で動きますか?
A動きません。watch() にはレプリカセットかシャーディングクラスタが必要で、スタンドアロン構成ではエラーになります。
Qwatch で挿入だけを監視できますか?
Aできます。パイプラインでフィルタします。例: db.users.watch([{$match: {'operationType': 'insert'}}])
Qwatch() の典型的な用途は?
Aリアルタイム同期、キャッシュ無効化、監査ログ、データ変更に反応するイベント駆動型フローです。