Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

ビュー

項目一覧

  • ユースケース
  • ビューの作成と管理
  • オンデマンド マテリアライズドビューとの比較
  • 動作
  • アクセス制御

MongoDB ビューは読み取り専用のクエリ可能なオブジェクトであり、その内容は他のコレクションまたはビューの集計パイプラインによって定義されます。

MongoDB はビューの内容をディスクに永続化しません。ビューのコンテンツは、クライアントがビューをクエリしたときにオンデマンドで計算されます。

注意

曖昧さ回避

このページでは標準ビューについて説明します。オンデマンドのマテリアライズドビューについて詳しくは、「オンデマンドのマテリアライズドビュー」を参照してください。

ビュー タイプ間の違いを理解するには、オンデマンド マテリアライズドビューとの比較」を参照してください。

ビューを使用すると、次のことができます。

ビューを作成および管理する方法については、次のリソースを参照してください。

MongoDB には、 標準ビューオンデマンドのマテリアライズドビューの 2 つの異なるビュータイプがあります。どちらのビュー タイプも、集計パイプラインから結果を返します。

  • 標準ビューはビューを読み取るときに計算され、ディスクに保存されません。

  • オンデマンドのマテリアライズドビューはディスクに保存され、ディスクから読み取れます。保存されたデータをアップデートするために、$mergeまたは$outステージを使用します。

    注意

    $mergeを使用すると、変更ストリームを使用してマテリアライズドビューの変更を監視できます。 $outを使用している場合、マテリアライズドビューの変更を監視することはできません。

標準ビューでは、基になるコレクションのインデックスが使用されます。そのため、標準ビューでインデックスを直接作成、削除、再構築したり、ビューでインデックスのリストを取得したりすることはできません。

オンデマンドのマテリアライズドビューはディスクに保存されるため、インデックスを直接作成できます。

オンデマンドのマテリアライズドビューは、クエリの一部として計算されるのではなくディスクから読み取られるため、標準ビューよりも読み取りパフォーマンスが向上します。このパフォーマンス上の利点は、パイプラインの複雑さと集約されるデータのサイズに応じて大きくなります。

以下のセクションでは、ビュー特有の動作について説明します。

ビューは読み取り専用です。ビューに対する書き込み操作はエラーを返します。

ビューはコレクション変更のタイムスタンプを維持せず、ポイントインタイムまたはスナップショット読み取りの分離をサポートしていません。

ビューの基盤となる集計パイプラインには、ブロッキングソート操作とブロッキンググループ操作のメモリ制限が 100 MB に制限されます。

MongoDB 6.0 以降、 100 MB 以上のメモリを必要とするパイプライン ステージでは、デフォルトで一時ファイルをディスクに書き込みます。これらの一時ファイルはパイプラインの実行中ずっと残り、インスタンスのストレージ容量に影響を与える可能性があります。以前のバージョンの MongoDB では、この動作を有効にするには、個々の find コマンドと aggregate コマンドに { allowDiskUse: true } を渡す必要がありました。

個々の findaggregate コマンドは、次のいずれかの方法で allowDiskUseByDefault パラメーターを上書きできます。

  • allowDiskUseByDefaultfalse に設定されている場合に { allowDiskUse: true } を使用して一時ファイルをディスクに書き込むことを許可する

  • allowDiskUseByDefaulttrue に設定されている場合に { allowDiskUse: false } を使用して一時ファイルがディスクに書き込むことを禁止する

注意

MongoDB Atlas でストレージが長時間実行クエリにより一時ファイルで満杯にするのを防ぐために、ストレージのオートスケーリングを構成することを推奨します。

Atlas クラスターでストレージのオートスケーリングが使用されている場合、一時ファイルによってクラスターが 1 つ上のストレージ階層にスケーリングされる場合があります。

  • 時系列コレクションは、書き込み可能な非マテリアライズドビューです。ビューの制限は、時系列コレクションに適用されます。詳細については「時系列コレクションの制限」を参照してください。

  • 時系列バケットコレクションの名前空間(つまり、system.buckets というプレフィックスが付いたコレクション)からビューを作成することはできません。

警告

system.profile という名前の時系列コレクションまたはビューを作成しないでください。MongoDB 6.3 以降のバージョンでは、これを実行しようとするとIllegalOperationエラーが返されます。以前のバージョンの MongoDB はクラッシュします。

配置で認証が強制される場合:

  • ビューを作成するには、ビューが作成されるデータベースに対するcreateCollection 特権が必要です。さらに、作成するビューの名前空間に対してfind 特権がある場合は、次のリソースに対するfind 特権も必要です。

  • ビューをクエリするには、ビューの名前空間に対する find特権が必要です。ソースコレクションまたは ビューパイプラインで参照される名前空間では、find特権は必要ありません。

readWriteデータベースに対して組み込み ロールを持つユーザーは、リスト内の操作を実行するために必要な特権があります。必要な権限を付与するには、次のいずれかを実行します。

戻る

データベースとコレクション