ビュー
MongoDB ビューは読み取り専用のクエリ可能なオブジェクトであり、その内容は他のコレクションまたはビューの集計パイプラインによって定義されます。
MongoDB はビューの内容をディスクに永続化しません。ビューのコンテンツは、クライアントがビューをクエリしたときにオンデマンドで計算されます。
注意
曖昧さ回避
このページでは標準ビューについて説明します。オンデマンドのマテリアライズドビューについて詳しくは、「オンデマンドのマテリアライズドビュー」を参照してください。
ビュー タイプ間の違いを理解するには、「オンデマンド マテリアライズドビューとの比較」を参照してください。
MongoDB Atlas でホストされている配置向け に UI でマテリアライズドビューを作成 できます。
ユースケース
ビューを使用すると、次のことができます。
従業員データのコレクションにビューを作成し、個人を特定できる情報(PII)を除外します。アプリケーションは、ビューに対して、 PIIを含まない従業員データをクエリできます。
計算されたフィールドとメトリクスを追加するには、センサーデータのコレクションにビューを作成します。アプリケーションは
find operations
を使用して計算されたデータをクエリできます。在庫と注文履歴を含む 2 つのコレクションを結合するビューを作成します。アプリケーションでは、基盤となるパイプラインを管理したり理解したりしなくても、ビューに対してクエリを実行できます。
ビューの作成と管理
ビューを作成および管理する方法については、次のリソースを参照してください。
オンデマンド マテリアライズドビューとの比較
MongoDB には、 標準ビュー と オンデマンドのマテリアライズドビューの 2 つの異なるビュータイプがあります。どちらのビュー タイプも、集計パイプラインから結果を返します。
標準ビューはビューを読み取るときに計算され、ディスクに保存されません。
オンデマンドのマテリアライズドビューはディスクに保存され、ディスクから読み取れます。保存されたデータをアップデートするために、
$merge
または$out
ステージを使用します。
Indexes
標準ビューでは、基になるコレクションのインデックスが使用されます。そのため、標準ビューでインデックスを直接作成、削除、再構築したり、ビューでインデックスのリストを取得したりすることはできません。
オンデマンドのマテリアライズドビューはディスクに保存されるため、インデックスを直接作成できます。
パフォーマンス
オンデマンドのマテリアライズドビューは、クエリの一部として計算されるのではなくディスクから読み取られるため、標準ビューよりも読み取りパフォーマンスが向上します。このパフォーマンス上の利点は、パイプラインの複雑さと集約されるデータのサイズに応じて大きくなります。
動作
以下のセクションでは、ビュー特有の動作について説明します。
読み取り専用
ビューは読み取り専用です。ビューに対する書き込み操作はエラーを返します。
スナップショットの分離
ビューはコレクション変更のタイムスタンプを維持せず、ポイントインタイムまたはスナップショット読み取りの分離をサポートしていません。
パイプライン表示
ビューの基盤となる集計パイプラインには、ブロッキングソート操作とブロッキンググループ操作のメモリ制限が 100 MB に制限されます。
MongoDB 6.0 以降、 100 MB 以上のメモリを必要とするパイプライン ステージでは、デフォルトで一時ファイルをディスクに書き込みます。これらの一時ファイルはパイプラインの実行中ずっと残り、インスタンスのストレージ容量に影響を与える可能性があります。以前のバージョンの MongoDB では、この動作を有効にするには、個々の find
コマンドと aggregate
コマンドに { allowDiskUse: true }
を渡す必要がありました。
個々の find
と aggregate
コマンドは、次のいずれかの方法で allowDiskUseByDefault
パラメーターを上書きできます。
allowDiskUseByDefault
がfalse
に設定されている場合に{ allowDiskUse: true }
を使用して一時ファイルをディスクに書き込むことを許可するallowDiskUseByDefault
がtrue
に設定されている場合に{ allowDiskUse: false }
を使用して一時ファイルがディスクに書き込むことを禁止する
注意
MongoDB Atlas でストレージが長時間実行クエリにより一時ファイルで満杯にするのを防ぐために、ストレージのオートスケーリングを構成することを推奨します。
Atlas クラスターでストレージのオートスケーリングが使用されている場合、一時ファイルによってクラスターが 1 つ上のストレージ階層にスケーリングされる場合があります。
時系列コレクション
時系列コレクションは、書き込み可能な非マテリアライズドビューです。ビューの制限は、時系列コレクションに適用されます。詳細については「時系列コレクションの制限」を参照してください。
時系列バケットコレクションの名前空間(つまり、
system.buckets
というプレフィックスが付いたコレクション)からビューを作成することはできません。
警告
system.profile
という名前の時系列コレクションまたはビューを作成しないでください。MongoDB 6.3 以降のバージョンでは、これを実行しようとするとIllegalOperation
エラーが返されます。以前のバージョンの MongoDB はクラッシュします。
アクセス制御
ビューを作成するには、ビューが作成されるデータベースに対する
createCollection
特権が必要です。さらに、作成するビューの名前空間に対してfind
特権がある場合は、次のリソースに対するfind
特権も必要です。新しいビューの作成元となるソースコレクションまたはビュー。
ビューをクエリするには、ビューの名前空間に対する
find
特権が必要です。ソースコレクションまたは ビューパイプラインで参照される名前空間では、find
特権は必要ありません。
readWrite
データベースに対して組み込み ロールを持つユーザーは、リスト内の操作を実行するために必要な特権があります。必要な権限を付与するには、次のいずれかを実行します。