【初心者向け】MongoDB Compassの使い方入門:インストールから基本操作まで

はい、承知いたしました。MongoDB Compassのインストールから基本操作までを詳細に解説する、初心者向けの約5000語の記事を作成します。記事の内容を直接表示します。


【初心者向け】MongoDB Compassの使い方入門:インストールから基本操作まで

はじめに:MongoDB Compassとは?なぜ使うのか?

データベースと聞くと、多くの人がSQLを使ったコマンド操作をイメージするかもしれません。しかし、特に初心者にとって、コマンドライン(CUI)での操作は敷居が高く感じられることがあります。データベースの内容を確認したり、データを追加・編集・削除したりする際に、「視覚的」に操作できるツールがあれば、学習効率は飛躍的に向上します。

そこで登場するのが、MongoDB Compassです。

MongoDB Compassは、MongoDB Inc.が提供する公式のGUI (Graphical User Interface) ツールです。コマンドを一切入力することなく、直感的な操作でMongoDBデータベースを管理できます。

  • データベースの内容確認: どのようなデータベースがあり、それぞれにどんなデータ(コレクション)が格納されているのかが一目でわかります。
  • データの追加・編集・削除 (CRUD操作): ドキュメント(MongoDBにおけるデータの単位)の作成、読み取り、更新、削除といった基本的な操作をマウス操作で行えます。
  • クエリの実行: 複雑な検索条件も、入力支援機能を使ったり、視覚的に設定したりして簡単に実行できます。
  • スキーマの分析: コレクション内のドキュメント構造(スキーマ)を分析し、データのばらつきなどを把握できます。
  • インデックスの管理: クエリのパフォーマンス向上のためにインデックスを作成・削除できます。
  • パフォーマンスの監視: クエリの実行計画(Explain Plan)を確認し、ボトルネックを特定できます。
  • 集計パイプラインの構築: 複数の操作を組み合わせてデータを集計・変換するアグリゲーションパイプラインを、段階的に構築・テストできます。

これらの強力な機能を、GUIを通じて簡単に利用できるのがMongoDB Compassの最大の魅力です。特に、MongoDBを学び始めたばかりの初心者にとっては、データの構造や操作の感覚を掴む上で非常に役立ちます。

この記事では、MongoDB Compassを使い始めるためのステップを、初心者の方でもつまづかないように詳細に解説していきます。インストール方法から、実際のデータベースへの接続、基本的な操作方法までを網羅します。約5000語というボリュームで、一つ一つのステップを丁寧に説明し、多くの図解(この記事ではテキストでの説明になりますが、実際の操作画面を想像しやすいように記述します)や具体例を交えながら進めていきます。

さあ、MongoDB Compassの世界へ足を踏み入れ、MongoDBの学習をよりスムーズに進めましょう!

第1章:MongoDB Compassのインストール

MongoDB Compassを使用するには、まずお使いのコンピューターにCompassをインストールする必要があります。インストール自体は難しくありませんが、お使いのOS(Windows、macOS、Linux)によって手順が少し異なります。ここでは、それぞれのOSごとのインストール方法を詳しく解説します。

また、MongoDB Compassは基本的にMongoDBサーバーに接続して使用するツールです。そのため、事前にMongoDBサーバーが起動しているか、またはMongoDB Atlas(クラウド上のMongoDBサービス)のアカウントがあることを前提とします。もしMongoDBサーバーをまだインストールしていない場合は、別途MongoDBの公式サイトなどを参考にインストールしておいてください(CompassはAtlasに接続するだけでも利用可能です)。

1.1 ダウンロード

MongoDB Compassのダウンロードは、MongoDBの公式サイトから行います。常に最新版を使用することをおすすめします。

  1. MongoDB公式サイトにアクセス: ウェブブラウザを開き、以下のURLにアクセスします。
    https://www.mongodb.com/try/download/compass
  2. OSの選択: ダウンロードページにアクセスすると、通常はアクセスしているコンピューターのOSが自動的に検出されます。もし間違っている場合は、「Select your OS」のドロップダウンメニューからお使いのOS(Windows, macOS, Linux)を選択してください。
  3. パッケージタイプの選択 (Linuxの場合): Linuxを選択した場合、通常はいくつかのパッケージタイプが表示されます。お使いのLinuxディストリビューション(Ubuntu, Debian, CentOS, RHELなど)に適したパッケージを選択します。例えば、UbuntuやDebianなら .deb、CentOSやRHELなら .rpm を選びます。あるいは、特定のディストリビューションに依存しない .tgz (tarball) も選択できます。初心者の方は、お使いの環境に合わせて、パッケージマネージャーでインストールできる形式(.deb, .rpm など)を選ぶのが一般的です。
  4. ダウンロードボタンをクリック: OSとパッケージタイプ(必要な場合)を選択したら、「Download」ボタンをクリックします。Compassのインストーラーファイルまたは圧縮ファイルがダウンロードされます。ファイルサイズがそれなりにあるため、ダウンロードには数分かかる場合があります。

1.2 インストール手順

ダウンロードしたファイルの種類によって、インストール手順が異なります。お使いのOSに合わせて以下の手順を実行してください。

1.2.1 Windowsの場合

  1. インストーラーの実行: ダウンロードした .exe ファイルをダブルクリックして実行します。ファイル名は mongodb-compass-*-win32-x64.exe のようになっています(* はバージョン番号)。
  2. セキュリティ警告: Windowsのユーザーアカウント制御(UAC)により、「このアプリがデバイスに変更を加えることを許可しますか?」という警告が表示されることがあります。「はい」をクリックして続行します。
  3. インストールの開始: インストーラーが起動し、インストールが開始されます。特別な設定は不要な場合が多く、自動的にインストールが進みます。
    • インストールオプション: 一部のバージョンや企業向けのインストーラーでは、「Typical」インストールや「Custom」インストールを選択できる場合があります。特別な理由がなければ「Typical」を選択してください。
    • インストール先の選択: インストール先フォルダを指定できる場合があります。デフォルトのままで問題ありません。
  4. インストールの完了: インストールが完了すると、「MongoDB Compass Setup」といったウィンドウが表示され、「Finish」ボタンや「Run MongoDB Compass」といったチェックボックスが表示されます。チェックボックスにチェックが入っていると、完了ボタンをクリックした後にCompassが自動的に起動します。「Finish」をクリックしてインストーラーを閉じます。

これでWindowsへのインストールは完了です。スタートメニューやデスクトップにMongoDB Compassのアイコンが追加されているはずです。

1.2.2 macOSの場合

  1. ディスクイメージファイルの展開: ダウンロードした .dmg ファイルをダブルクリックして開きます。ファイル名は mongodb-compass-*-darwin-x64.dmg のようになっています。
  2. アプリケーションフォルダへのコピー: .dmg ファイルを開くと、通常、Finderのウィンドウが開かれ、MongoDB Compassのアイコンと「Applications」フォルダへのショートカットが表示されます。MongoDB Compassのアイコンを「Applications」フォルダのショートカットにドラッグ&ドロップします。
  3. コピーの完了: ファイルのコピーが完了するまで待ちます。
  4. ディスクイメージの取り出し: Finderのサイドバーにある「MongoDB Compass」の横にある「取り出し」アイコンをクリックするか、デスクトップ上のMongoDB Compassアイコンをゴミ箱にドラッグして、ディスクイメージを取り出します。これは必須ではありませんが、不要になったディスクイメージは取り出すのが一般的です。

これでmacOSへのインストールは完了です。「アプリケーション」フォルダの中にMongoDB Compassが追加されています。Launchpadからも起動できるようになります。

1.2.3 Linuxの場合 (.deb パッケージを例に)

ここでは、DebianやUbuntuで使用される .deb パッケージを例に説明します。他のパッケージタイプやtarballの場合は、それぞれの形式に応じたインストールコマンドを使用してください。

  1. ターミナルを開く: アプリケーションメニューからターミナルエミュレーターを起動します。
  2. ダウンロードしたファイルがあるディレクトリへ移動: cd コマンドを使って、ダウンロードした .deb ファイルがあるディレクトリに移動します。例えば、ダウンロード フォルダにダウンロードした場合は cd ~/Downloads と入力します。
  3. インストールコマンドの実行: 以下のコマンドを実行してインストールします。mongodb-compass-*.deb の部分は、ダウンロードしたファイル名に合わせてください。

    bash
    sudo dpkg -i mongodb-compass-*.deb

    パスワードを求められたら、コンピューターのログインパスワードを入力します。
    4. 依存関係の問題の解決 (必要な場合): dpkg -i コマンドだけでは、依存関係にあるパッケージがインストールされない場合があります。その場合、以下のコマンドを実行して依存関係を解決し、インストールを完了させます。

    bash
    sudo apt --fix-broken install

    このコマンドは、不足している依存関係パッケージをダウンロードしてインストールしてくれます。

これでLinuxへのインストールは完了です。アプリケーションメニューやダッシュボードからMongoDB Compassを検索して起動できるようになります。

1.3 インストールの確認と起動

インストールが完了したら、MongoDB Compassを起動して正しくインストールされたか確認しましょう。

  • Windows: スタートメニューから「MongoDB Compass」を検索してクリックするか、デスクトップのアイコンをダブルクリックします。
  • macOS: 「アプリケーション」フォルダを開き、「MongoDB Compass」アイコンをダブルクリックするか、Launchpadから起動します。
  • Linux: アプリケーションメニューまたはダッシュボードから「MongoDB Compass」を検索してクリックします。ターミナルから mongodb-compass と入力して実行することも可能です。

初めて起動する際には、利用規約への同意や、使用状況データの送信に関する設定画面が表示されることがあります。内容を確認し、同意または設定を行ってください。これらの初期設定を終えると、MongoDB Compassのメイン画面が表示されます。

これでMongoDB Compassのインストールは完了です。次の章では、実際にMongoDBデータベースに接続する方法を学びます。

第2章:MongoDBデータベースへの接続

MongoDB Compassを使用するには、操作対象となるMongoDBデータベースに接続する必要があります。接続方法はいくつかありますが、ここでは初心者の方がよく利用するであろう以下の3つの方法を中心に解説します。

  1. ローカルで実行中のMongoDBサーバーへの接続
  2. MongoDB Atlas(クラウドサービス)への接続
  3. 接続文字列(URI)を使用した接続

MongoDB Compassを起動すると、まず接続画面が表示されます。この画面から、新しい接続を設定したり、過去に設定した接続を選択したりできます。

2.1 ローカルのMongoDBサーバーへの接続

ローカル環境(自分のコンピューター)にMongoDBサーバーをインストールして起動している場合、最も簡単な方法で接続できます。デフォルト設定でMongoDBサーバーを起動している場合、Compassは自動的にその設定を検出することが多いです。

  1. Compassを起動: MongoDB Compassを起動します。
  2. デフォルト接続の確認: Compassの接続画面で、「New Connection」の下に mongodb://localhost:27017/ という接続情報が表示されているか確認します。
    • これは、ローカルホスト(自分のコンピューター)のポート番号 27017 で待機しているMongoDBサーバーへの接続を示す標準的なURI形式です。MongoDBサーバーのデフォルトポートは27017です。
  3. 「Connect」ボタンをクリック: 表示されている mongodb://localhost:27017/ の行、またはその横にある「Connect」ボタンをクリックします。

もしMongoDBサーバーがローカルで起動しており、デフォルト設定のままなら、これで接続が成功し、データベースの一覧画面が表示されるはずです。

接続できない場合:
* MongoDBサーバーが起動しているか確認: ローカルのMongoDBサーバーが停止している可能性があります。ターミナルやサービス管理ツールを使ってMongoDBサーバーを起動してください(例: mongod コマンドを実行するか、システムのサービスとして起動しているか確認)。
* ポート番号が異なる: もしMongoDBサーバーをデフォルトとは異なるポート番号で起動している場合は、接続情報を編集する必要があります(後述の「手動での接続設定」を参考にポート番号を変更してください)。
* ファイアウォール: コンピューターのファイアウォールがポート27017への接続をブロックしている可能性があります。ファイアウォールの設定を確認してください。

2.2 MongoDB Atlasへの接続

MongoDB Atlasは、MongoDBが提供する公式のクラウドデータベースサービスです。無料で利用できるティア(M0クラスター)もあり、手軽にクラウド上のMongoDB環境を試すことができます。Atlas上のデータベースにCompassから接続するには、AtlasのWebインターフェースで発行される「接続文字列(Connection String)」を使用するのが最も簡単です。

Atlasで接続文字列を取得する手順 (簡略版):

  1. MongoDB AtlasのWebサイトにログインします。
  2. 接続したいクラスターを選択します。
  3. クラスターの概要ページで「Connect」ボタンをクリックします。
  4. 接続方法の選択画面が表示されます。「Connect with MongoDB Compass」を選択します。
  5. 表示される接続文字列をコピーします。通常は以下のような形式です。
    mongodb+srv://<username>:<password>@<cluster-url>/<dbname>?retryWrites=true&w=majority

    • <username><password> の部分は、Atlasでデータベースユーザーを作成した際のユーザー名とパスワードに置き換える必要があります。Compassにペーストする前に、これらの情報を手動で書き換えるか、Compassが自動的に入力フィールドとして提示する場合に入力します。
    • <cluster-url> はAtlasクラスターのアドレスです。
    • <dbname> は接続先のデータベース名ですが、通常は省略可能です。省略した場合、Compassはデフォルトのデータベース(通常は test)に接続しますが、後からCompass内で他のデータベースに切り替えることができます。

Compassでの接続手順:

  1. Compassを起動: MongoDB Compassを起動します。
  2. 接続画面を開く: 起動時に表示される接続画面、または左上の「New Connection」ボタンをクリックして新しい接続設定画面を開きます。
  3. 接続文字列をペースト: 接続設定画面の上部にあるテキストボックスに、Atlasからコピーした接続文字列をペーストします。Compassはペーストされた文字列を解析し、必要な情報を自動的に各フィールドに振り分けようとします。
  4. 認証情報の入力: 接続文字列の <username><password> 部分を置き換えていなかった場合、Compassはこれらの情報が不足していることを検出し、ユーザー名とパスワードの入力フィールドを表示します。Atlasで作成したデータベースユーザーのユーザー名とパスワードを正確に入力します。
  5. 「Connect」ボタンをクリック: すべての情報が正しく入力されていることを確認し、「Connect」ボタンをクリックします。

認証情報や接続設定が正しければ、Atlas上のデータベースに接続が成功し、データベースの一覧画面が表示されます。

接続できない場合:
* 接続文字列の間違い: コピー&ペーストがうまくいかなかったり、<username><password> の置き換えを忘れていたりしないか確認してください。
* ユーザー名・パスワードの間違い: Atlasで設定したデータベースユーザーの認証情報が正しいか再度確認してください。大文字・小文字の違いにも注意が必要です。
* ネットワークアクセス設定: Atlas側で、Compassを実行しているコンピューターのIPアドレスからの接続が許可されているか確認してください。デフォルトでは、特定のIPアドレスまたは「どこからでも接続可能 (Allow Access from Anywhere)」に設定する必要があります。セキュリティ上は特定のIPアドレスを許可するのが望ましいですが、初心者や試用段階では一時的に「どこからでも」を許可することもあります(本番環境では推奨されません)。
* ファイアウォール: ローカルコンピューターのファイアウォールが、Atlasへのアウトバウンド接続をブロックしている可能性があります。
* Atlasクラスターの状態: Atlasクラスターが正しくデプロイされ、実行中であるか確認してください。

2.3 手動での接続設定 (Manual Connection)

接続文字列を使わず、ホスト名、ポート番号、認証情報などを手動で入力して接続設定を行う方法です。ローカルサーバーでデフォルト以外の設定を使用している場合や、詳細な接続オプションを指定したい場合に利用します。

  1. Compassを起動: MongoDB Compassを起動します。
  2. 接続画面を開く: 起動時に表示される接続画面、または左上の「New Connection」ボタンをクリックして新しい接続設定画面を開きます。
  3. 「Fill in connection fields individually」を選択: 接続文字列の入力フィールドの下にある「Fill in connection fields individually」リンク(または類似のボタン)をクリックします。これにより、ホスト名やポート番号などを個別の入力フィールドで指定する画面が表示されます。
  4. 接続情報の入力: 以下のフィールドに必要な情報を入力します。
    • Hostname: 接続先のMongoDBサーバーのホスト名またはIPアドレスを入力します。ローカルの場合は localhost または 127.0.0.1、リモートサーバーやクラウド環境の場合はそのホスト名やIPアドレス。
    • Port: MongoDBサーバーが待機しているポート番号を入力します。デフォルトは 27017 です。
    • Authentication: 認証が必要な場合に設定します。通常は「Username / Password」を選択します。
      • Username: 接続に使用するユーザー名を入力します。
      • Password: 接続に使用するパスワードを入力します。
      • Authentication Database: 認証に使用するデータベースを指定します。通常は admin データベースですが、設定によっては異なります。指定がない場合はデフォルトのデータベースが使用されます。
    • SSL: SSL/TLSを使用して接続を暗号化する場合に設定します。セキュアな接続が必要な場合(特にリモートサーバーやAtlasへの接続時)に有効にします。通常は「System CA / OS defaults」を選択しますが、証明書ファイルが必要な場合もあります。
    • Replica Set: 接続先がレプリカセットの一部である場合に、レプリカセット名を入力します。レプリカセットは可用性や耐障害性を高めるための構成ですが、初心者向けのローカル環境では単一インスタンスの場合が多いです。Atlasに接続する場合は通常レプリカセット名が必要です(接続文字列をペーストすれば自動設定されます)。
    • Advanced Options: さらに詳細な接続オプション(読み取り設定、書き込み設定、タイムアウトなど)を設定できますが、初心者の方は通常デフォルトのままで問題ありません。
  5. 「Connect」ボタンをクリック: すべての情報が正しく入力されていることを確認し、「Connect」ボタンをクリックします。

情報が正しければ接続が成功し、データベースの一覧画面が表示されます。

2.4 接続の保存と管理

頻繁に接続するデータベースがある場合、接続設定を保存しておくと便利です。

  1. 接続設定の保存: 接続設定を入力し、「Connect」ボタンの左隣にある「Favorite」ボタン(星のアイコン)をクリックします。
  2. 名前を付ける: 接続に分かりやすい名前を付けます(例: 「ローカル開発DB」「Atlas無料クラスター」など)。
  3. 保存: 保存ボタンをクリックします。

保存された接続は、Compass起動時の接続画面の「Favorites」セクションに表示されるようになります。次回からは、保存した接続をクリックするだけで簡単に接続できます。

また、接続画面の「Recent」セクションには、最近接続したデータベースが表示されます。保存していない接続でも、ここから再接続できます。

接続設定を編集したり削除したりしたい場合は、接続画面で該当する接続にマウスカーソルを合わせると表示される編集アイコンや削除アイコンを使用します。

これでデータベースへの接続は完了です。次の章では、MongoDB Compassの基本的な画面構成と操作方法を見ていきましょう。

第3章:MongoDB Compassのインターフェースを理解する

MongoDB Compassに接続が成功すると、そのデータベース環境の概要が表示されます。ここでは、Compassの主要な画面構成とその役割について解説します。

Compassの画面は、主に以下の領域に分かれています。

  1. 接続情報バー: 画面上部に表示され、現在接続しているデータベースサーバーの情報(ホスト名、ポート番号、レプリカセット名など)が表示されます。
  2. データベース一覧画面: 接続直後に表示される画面です。サーバー内のすべてのデータベースとその基本的な情報(サイズ、コレクション数など)が表示されます。
  3. データベース詳細画面: データベース一覧から特定のデータベースを選択すると表示されます。そのデータベースに含まれるすべてのコレクションとその情報が表示されます。
  4. コレクション詳細画面: データベース詳細から特定のコレクションを選択すると表示されます。この画面が、実際のドキュメント操作や分析を行う主要なワークスペースとなります。

3.1 データベース一覧画面

接続に成功すると、最初にこの画面が表示されます。

  • Databasesリスト: 画面の左側または中央に、サーバーに存在するデータベースのリストが表示されます。
  • Admin, Config, Local: 通常、MongoDBには adminconfiglocal といった管理用のデータベースが自動的に作成されます。これらはシステム内部で使用されるものなので、通常は触る必要はありません。自分で作成したデータベースや、アプリケーションが使用するデータベースはこれら以外の名前になります。
  • 情報列: 各データベースの行には、そのデータベースのサイズ(Storage Size)や、含まれるコレクションの数(Collections)が表示されます。
  • 「Create Database」ボタン: 画面上部や左側にあるこのボタンをクリックすると、新しいデータベースを作成できます(適切な権限が必要です)。

特定のデータベースの詳細を見るには、リストからそのデータベースの名前をクリックします。

3.2 データベース詳細画面

データベース一覧からデータベースを選択すると、そのデータベースの詳細画面に切り替わります。

  • Database名: 画面上部に選択したデータベースの名前が表示されます。
  • Collectionsリスト: 画面中央に、そのデータベースに含まれるすべてのコレクションのリストが表示されます。
  • 情報列: 各コレクションの行には、ドキュメント数(Documents)、データサイズ(Data Size)、インデックスサイズ(Index Size)といった情報が表示されます。
  • 「Create Collection」ボタン: 画面上部にあるこのボタンをクリックすると、選択中のデータベース内に新しいコレクションを作成できます(適切な権限が必要です)。

特定のコレクションの内容や操作を行うには、リストからそのコレクションの名前をクリックします。

3.3 コレクション詳細画面(主要ワークスペース)

データベース詳細からコレクションを選択すると、Compassの主要なワークスペースとなるコレクション詳細画面が表示されます。この画面は、そのコレクション内のドキュメントを表示・操作したり、コレクションの構造やパフォーマンスを分析したりするための様々な機能が集まっています。

この画面はさらにいくつかのタブに分かれています。各タブの役割を見ていきましょう。

3.3.1 Documents タブ

これがデフォルトで表示されるタブであり、最もよく使うタブです。コレクション内に保存されているドキュメントの一覧が表示されます。

  • ドキュメントリスト: コレクション内のドキュメントがリスト形式で表示されます。各ドキュメントはJSON形式で表示されるのが基本ですが、「View as:」オプションで「Table」形式に切り替えることもできます(複雑な構造のドキュメントには向きません)。
  • ナビゲーション: 画面下部には、表示するドキュメント数の制限(Limit)、スキップ数(Skip)、そして「Next」「Previous」ボタンなどのページネーションコントロールがあります。コレクションのドキュメント数が多い場合、一度にすべてを表示するのではなく、ページごとに表示されます。
  • ドキュメント操作: 各ドキュメントにマウスカーソルを合わせると、そのドキュメントを編集(Edit Document)したり、複製(Clone Document)したり、削除(Delete Document)したりするためのアイコン(通常は「…」メニューの中に含まれます)が表示されます。
  • ツールバー: 画面上部には、Documentsタブでの操作を制御するための様々なツールバーがあります。
    • Filter: ドキュメントを検索・絞り込むためのクエリ条件(JSON形式)を入力するフィールドです。
    • Project: 取得するドキュメントのフィールドを絞り込むための投影条件(JSON形式)を入力するフィールドです。
    • Sort: ドキュメントの表示順序を指定するためのソート条件(JSON形式)を入力するフィールドです。
    • Options: その他のクエリオプション(例: Case-insensitiveなど)を設定できるボタンです。
    • Refresh: 表示を更新するボタンです。
    • Export Data: コレクションのデータをファイルにエクスポートするためのボタンです。
    • Insert Document: 新しいドキュメントをコレクションに追加するためのボタンです。

3.3.2 Schema タブ

このタブでは、コレクション内のドキュメント構造(スキーマ)を分析した結果が表示されます。MongoDBはスキーマレス(厳密にはフレキシブルスキーマ)なデータベースですが、 Compassはこのタブでドキュメントをサンプリングし、よく出現するフィールドやそのデータ型、出現頻度、データ分布などを視覚的に表示してくれます。

  • フィールドリスト: ドキュメント内で見つかったフィールドとそのデータ型(String, Number, Boolean, Date, Array, Objectなど)が表示されます。
  • データ分布: 各フィールドについて、最も一般的なデータ型や、各データ型の出現率、ユニークな値の数などがグラフや数値で表示されます。
  • Schema Analysisボタン: サンプリングを実行または再実行するためのボタンです。

Schemaタブは、コレクション内のデータの整合性や構造のばらつきを把握するのに非常に役立ちます。

3.3.3 Indexes タブ

このタブでは、コレクションに定義されているインデックスの一覧が表示されます。インデックスはクエリの検索速度を向上させるために重要です。

  • インデックスリスト: 現在コレクションに存在するインデックス(デフォルトで作成される _id インデックスを含む)が表示されます。
  • インデックス情報: 各インデックスがどのフィールドを対象としているか、昇順(1)か降順(-1)か、ユニークインデックスか、スパースインデックスか、TTLインデックスかといった情報が表示されます。
  • 「Create Index」ボタン: 新しいインデックスを作成するためのボタンです。インデックスを作成したいフィールドとその順序などをGUIで簡単に設定できます。
  • インデックスの削除: 各インデックスの行に表示されるゴミ箱アイコンをクリックすることで、そのインデックスを削除できます。

3.3.4 Explain Plan タブ

クエリのパフォーマンスを分析するためのタブです。Documentsタブで実行したクエリやアグリゲーションの実行計画(Explain Plan)を表示し、インデックスが使われているか、どれくらいのドキュメントをスキャンしたかなどを視覚的に確認できます。

  • 実行計画の表示: クエリがどのように実行されたかを示すツリー構造やグラフが表示されます。
  • 詳細情報: ステージごとの実行時間、スキャンされたドキュメント数(docs Examined)、返されたドキュメント数(docs Returned)などの詳細なメトリクスが表示されます。

このタブは、特定のクエリが遅い場合に、その原因を探るのに役立ちます。

3.3.5 Aggregations タブ

MongoDBの強力なデータ集計・変換機能であるアグリゲーションパイプラインを構築・実行するためのタブです。複数の処理ステージ(例: $match で絞り込み、$group でグループ化、$sort で並べ替えなど)を組み合わせて、複雑なデータ処理を行うことができます。

  • パイプラインステージ: 画面左側に、追加したアグリゲーションステージがリスト表示されます。
  • ステージ設定: 各ステージを選択すると、そのステージの具体的な設定(例: $match ステージなら絞り込み条件)をJSON形式で入力するエディターが表示されます。
  • 結果プレビュー: パイプラインの各ステージを実行した結果がプレビューとして表示されます。これにより、段階的にパイプラインを構築・デバッグできます。
  • 「Add Stage」ボタン: 新しいアグリゲーションステージをパイプラインに追加するためのボタンです。

3.3.6 Validation タブ

コレクションに対してスキーマバリデーションルールを設定・確認するためのタブです。スキーマバリデーションを使用すると、コレクションに挿入・更新されるドキュメントが、定義されたスキーマに従っているかを強制できます。

  • バリデーションルールの表示・編集: 設定されているバリデーションルール(JSON Schema形式など)が表示されます。ここでルールを編集したり、新しく設定したりできます。
  • 「Add Validation」ボタン: 新しいバリデーションルールを追加するためのボタンです。

これらのタブを切り替えながら、コレクションの管理やデータ操作、分析を行います。次の章では、最も基本的な操作であるCRUD (Create, Read, Update, Delete) について、Documentsタブを中心に詳しく見ていきます。

第4章:基本的なデータ操作(CRUD)

MongoDB CompassのDocumentsタブを使って、コレクション内のドキュメントに対して基本的なCRUD(Create, Read, Update, Delete)操作を行う方法を学びます。これらの操作は、データベースの内容を確認したり、テストデータを投入したり、誤ったデータを修正したりする際に非常に重要です。

ここでは、「myDatabase」という名前のデータベースの中に、「users」という名前のコレクションがあるという想定で解説を進めます。もしコレクションがない場合は、第3章で説明した「Create Database」および「Create Collection」ボタンを使って作成してください。

4.1 ドキュメントの追加(Create)

新しいドキュメントをコレクションに追加する方法です。Compassでは主に2つの方法があります。

  1. 「Insert Document」ボタンを使用:

    • Collectionsタブで対象のコレクション(例: users)を選択し、Documentsタブを表示します。
    • 画面上部のツールバーにある「Add Data」ドロップダウンボタンをクリックし、「Insert Document」を選択します。
    • 新しいドキュメントを作成するためのエディターが表示されます。デフォルトではJSON形式で入力するようになっています。
    • ドキュメントをJSON形式で入力します。例えば、名前、年齢、都市の情報を持つユーザーを追加する場合、以下のように入力します。

      json
      {
      "name": "Alice",
      "age": 30,
      "city": "Tokyo",
      "isActive": true,
      "registeredDate": { "$date": "2023-01-15T10:00:00Z" },
      "tags": ["初心者", "mongodb"]
      }

      * MongoDBでは、ドキュメントはキーと値のペアの集まりです。キーは文字列、値は様々なデータ型(文字列、数値、真偽値、配列、ネストされたドキュメント、日付、Nullなど)を取ることができます。
      * _id フィールドは、ドキュメントの一意な識別子です。通常、明示的に指定しない場合、MongoDBが自動的に ObjectId 型の値を生成して付与します。上の例では _id を指定していないので、自動的に生成されます。
      * 日付型を指定する場合は、{ "$date": "ISO 8601形式の日付文字列" } のように $date オペレーターを使用すると便利です。
      * 入力が終わったら、画面下部にある「Insert」ボタンをクリックします。
      * 挿入が成功すると、Documentsタブのリストに新しいドキュメントが表示されます。

  2. 「Import File」を使用(複数のドキュメントを追加):

    • 複数のドキュメントを一度に追加したい場合は、JSONファイルやCSVファイルからインポートできます。
    • Documentsタブのツールバーにある「Add Data」ドロップダウンボタンをクリックし、「Import File」を選択します。
    • インポートするファイルの形式(JSONまたはCSV)を選択します。JSONの場合は、ドキュメントの配列形式(例: [{...}, {...}])または、各行が1つのJSONドキュメントになっている形式(JSON Lines)がサポートされます。
    • 「SELECT A FILE」ボタンをクリックし、インポートしたいファイルを選択します。
    • 必要に応じて、インポートに関する詳細設定(例: CSVの場合の区切り文字、ヘッダー行の扱いなど)を行います。
    • 「Import」ボタンをクリックします。
    • インポートの進行状況が表示され、完了すると結果が表示されます。

これでドキュメントの追加は完了です。

4.2 ドキュメントの読み取り(Read / Query)

コレクション内のドキュメントを表示したり、特定の条件に合致するドキュメントを検索したりする方法です。これはDocumentsタブのFilter、Project、Sortツールバーを使用して行います。

4.2.1 全件表示

Documentsタブを開いた直後は、特別なフィルタを設定しない限り、コレクション内のすべてのドキュメントが表示されます。ドキュメント数が多数の場合は、ページネーションで区切られて表示されます。

4.2.2 ドキュメントの絞り込み(Filter)

特定の条件に合致するドキュメントだけを表示したい場合は、Filterツールバーにクエリ条件をJSON形式で入力します。

  • Filterフィールド: Documentsタブの上部にある「Filter」というラベルの付いたテキストボックスにクエリドキュメント(JSON形式)を入力します。
  • 「Find」ボタン: クエリを入力したら、その右側にある「Find」ボタンをクリックして検索を実行します。

以下にいくつかの基本的なクエリ例を示します。

  • 条件なし(全件表示):
    json
    {}

    空のドキュメント {} は、「条件なし」を意味し、すべてのドキュメントに一致します。
  • 特定のフィールドの値が一致するドキュメント:
    名前が「Alice」のユーザーを検索する場合。
    json
    { "name": "Alice" }
  • 複数の条件をANDで結合:
    名前が「Alice」で、かつ都市が「Tokyo」のユーザーを検索する場合。条件を単純にカンマ区切りで列挙すると、それらは自動的にAND条件とみなされます。
    json
    { "name": "Alice", "city": "Tokyo" }

    または、明示的に $and オペレーターを使用することもできます(より複雑なAND条件や他の論理演算子と組み合わせる場合に便利です)。
    json
    { "$and": [ { "name": "Alice" }, { "city": "Tokyo" } ] }
  • 比較演算子を使用:
    年齢が30歳より大きい(Greater Than)ユーザーを検索する場合。$gt は「〜より大きい」を意味する比較演算子です。
    json
    { "age": { "$gt": 30 } }

    その他の主な比較演算子:

    • $lt: 〜より小さい (Less Than)
    • $gte: 〜以上 (Greater Than or Equal to)
    • $lte: 〜以下 (Less Than or Equal to)
    • $ne: 〜と等しくない (Not Equal)
    • $in: 配列中のいずれかの値と一致 (In) 例: { "city": { "$in": ["Tokyo", "Osaka"] } } (都市が「Tokyo」または「Osaka」のユーザー)
    • $nin: 配列中のいずれの値とも一致しない (Not In) 例: { "city": { "$nin": ["Tokyo", "Osaka"] } } (都市が「Tokyo」でも「Osaka」でもないユーザー)
  • 論理演算子を使用:
    年齢が20歳より大きい、または都市が「Osaka」のユーザーを検索する場合。$or は「〜または〜」を意味する論理演算子です。
    json
    { "$or": [ { "age": { "$gt": 20 } }, { "city": "Osaka" } ] }

    その他の主な論理演算子:

    • $not: 条件を否定 (Not) 例: { "age": { "$not": { "$gt": 30 } } } (年齢が30歳より大きくないユーザー、つまり30歳以下のユーザー)
    • $nor: 複数の条件のいずれにも一致しない (Not OR) 例: { "$nor": [ { "age": { "$gt": 60 } }, { "city": "Tokyo" } ] } (年齢が60歳より大きくなく、かつ都市も「Tokyo」ではないユーザー)
  • 正規表現を使用:
    名前が「A」で始まるユーザーを検索する場合。
    json
    { "name": /^A/ }
  • 配列内の要素を検索:
    タグに「mongodb」が含まれるユーザーを検索する場合。
    json
    { "tags": "mongodb" }

    タグに「初心者」と「mongodb」の両方が含まれるユーザーを検索する場合。
    json
    { "tags": { "$all": ["初心者", "mongodb"] } }
  • ネストされたドキュメントのフィールドを検索:
    住所がネストされたドキュメント { "address": { "city": "Kyoto", "zip": "600-0000" } } のようになっている場合に、都市が「Kyoto」のユーザーを検索する場合。ドット記法(.)を使用します。
    json
    { "address.city": "Kyoto" }

Filterフィールドに入力するクエリは、MongoDB Shellで使用するクエリと同じ形式です。Compassには入力補完機能もあるので、活用しながら入力してみましょう。クエリを入力して「Find」ボタンをクリックするたびに、結果が更新されます。

4.2.3 表示フィールドの選択(Project)

取得するドキュメントのフィールドを絞り込みたい場合(例えば、名前と年齢だけを表示したい場合など)は、Projectツールバーに投影条件をJSON形式で入力します。これにより、ネットワーク負荷や表示する情報量を減らすことができます。

  • Projectフィールド: Documentsタブの上部にある「Project」というラベルの付いたテキストボックスに投影ドキュメント(JSON形式)を入力します。
  • 「Find」ボタン: 入力したら「Find」ボタンをクリックして検索を実行します。

投影条件は、表示したいフィールド名をキーとし、その値に 1 を指定します。表示したくないフィールド名はキーとし、値に 0 を指定します。

  • 名前と年齢だけを表示(_id以外):
    json
    { "name": 1, "age": 1 }

    _id フィールドは、特に指定しない限り常に表示されます。表示したくない場合は、明示的に { "_id": 0 } を追加します。
    json
    { "name": 1, "age": 1, "_id": 0 }
  • 特定のフィールド以外を表示:
    年齢フィールド以外を表示する場合。この場合、年齢フィールドに 0 を指定し、他のフィールドは指定しません。ただし、10 を混在させることは(_id を除く)できません。
    json
    { "age": 0 }

    この場合、_id と年齢以外のすべてのフィールドが表示されます。

Projectフィールドで条件を指定すると、ドキュメントリストの表示がその条件に従って変化します。

4.2.4 表示順序の指定(Sort)

ドキュメントを特定のフィールドの値で並べ替えたい場合は、Sortツールバーにソート条件をJSON形式で入力します。

  • Sortフィールド: Documentsタブの上部にある「Sort」というラベルの付いたテキストボックスにソートドキュメント(JSON形式)を入力します。
  • 「Find」ボタン: 入力したら「Find」ボタンをクリックして検索を実行します。

ソート条件は、並べ替えたいフィールド名をキーとし、昇順の場合は 1、降順の場合は -1 を値に指定します。複数のフィールドで並べ替える場合は、カンマ区切りで指定します。

  • 年齢の昇順で並べ替え:
    json
    { "age": 1 }
  • 名前の降順で並べ替え:
    json
    { "name": -1 }
  • 都市の昇順で並べ替え、同じ都市の場合は年齢の降順で並べ替え:
    json
    { "city": 1, "age": -1 }

4.2.5 その他のオプション(Options)

Optionsボタンをクリックすると、検索に関するその他の設定を行えます。

  • Limit: 表示するドキュメントの最大数を指定します。デフォルトは無制限またはCompassの設定による数ですが、大量のドキュメントがあるコレクションでは、この値を小さく設定することでCompassの動作を軽くできます。Documentsタブの下部にあるページネーションコントロールの「Limit」フィールドでも設定できます。
  • Skip: 先頭からスキップするドキュメント数を指定します。ページネーションに使用されます。Documentsタブの下部にあるページネーションコントロールの「Skip」フィールドでも設定できます。
  • Max Time MS: クエリの最大実行時間をミリ秒単位で指定します。この時間を超えるとクエリは中断されます。開発中のクエリが無限に実行されるのを防ぐのに役立ちます。
  • Read Preference: レプリカセットに接続している場合に、どのメンバー(プライマリ、セカンダリなど)からデータを読み取るかを指定します。
  • Collation: テキスト検索やソートにおいて、言語ごとの文字の比較ルールを指定します。日本語などを扱う場合に必要となることがあります。

これらのオプションを適切に設定することで、より効率的なクエリ実行やデバッグが可能になります。

4.2.6 データのビュー形式

Documentsタブのドキュメントリストの右上には、「View as:」というオプションがあります。

  • JSON (Default): ドキュメントをJSON形式で表示します。ネストされた構造なども正確に確認できます。
  • Table: ドキュメントをテーブル形式で表示します。各フィールドが列になり、各ドキュメントが行になります。シンプルなフラットな構造のドキュメントを一覧するのに便利ですが、ネストされたドキュメントや配列を含むドキュメントでは見づらくなることがあります。

4.3 ドキュメントの更新(Update)

既存のドキュメントの内容を編集する方法です。

4.3.1 単一ドキュメントの更新

リスト内の特定のドキュメントを編集したい場合は、そのドキュメントを直接編集します。

  1. 編集したいドキュメントを選択: Documentsタブのリストから、編集したいドキュメントを探します。必要に応じてFilterツールバーで絞り込みます。
  2. 編集アイコンをクリック: ドキュメントの行にマウスカーソルを合わせると右側に表示される「…」メニューをクリックし、「Modify Document」または鉛筆のアイコンをクリックします。
  3. ドキュメントの編集: ドキュメント全体を編集するためのJSONエディターが表示されます。
    • フィールドの値の変更
    • 新しいフィールドの追加
    • 既存のフィールドの削除
    • フィールド名の変更(新しいフィールドとして追加し、古いフィールドを削除する操作になります)
      など、JSON構造を直接編集します。
      例えば、年齢を31歳に変更する場合:
      json
      {
      "_id": { "$oid": "..." }, // _idは通常変更しません
      "name": "Alice",
      "age": 31, // ここを変更
      "city": "Tokyo",
      ...
      }
  4. 「Update」ボタンをクリック: 編集が終わったら、画面下部にある「Update」ボタンをクリックします。

更新が成功すると、リスト内のドキュメントの内容が変更されます。

4.3.2 複数ドキュメントの一括更新

Filter条件に合致する複数のドキュメントに対して、一括で同じ変更を加えたい場合は、Documentsタブのツールバーにある「Update」ボタンを使用します。

  1. 「Update」ボタンをクリック: Documentsタブの上部ツールバーにある「Update」ボタンをクリックします。
  2. Filter条件を指定: 更新対象のドキュメントを特定するためのFilter条件(JSON形式)を入力します。例えば、都市が「Tokyo」のユーザー全員を更新したい場合。
    json
    { "city": "Tokyo" }

    • 重要: Filter条件が空 {} の場合、コレクション内のすべてのドキュメントが更新対象になります。意図しない大量のデータ変更を防ぐため、Filter条件は慎重に設定してください。
  3. Updateドキュメントを指定: 適用したい更新内容をJSON形式で指定します。ここでは、$setや$incなどの更新オペレーターを使用するのが一般的です。
    例えば、都市が「Tokyo」のユーザー全員の年齢を1歳増やす場合。$inc オペレーターを使用します。
    json
    { "$inc": { "age": 1 } }

    都市が「Tokyo」のユーザー全員に「subscriber」というタグを追加する場合。$push オペレーターを使用します。
    json
    { "$push": { "tags": "subscriber" } }

    都市が「Tokyo」のユーザー全員の isActive フィールドを false に設定する場合。$set オペレーターを使用します。
    json
    { "$set": { "isActive": false } }

    • 単一ドキュメントの編集とは異なり、複数ドキュメントの更新ではドキュメント全体を置き換えるのではなく、更新オペレーターを使ってフィールドの一部を変更するのが一般的です。ドキュメント全体を置き換えることも可能ですが、誤って $set を使わずに {} のような空のドキュメントを指定すると、元のドキュメントのフィールドがすべて失われてしまう可能性があるため、十分注意が必要です。
  4. Optionsを設定 (必要に応じて):
    • Update: 「One Document」または「Many Documents」を選択します。Filter条件に合致する最初の1件だけを更新するか、合致するすべてを更新するかを指定します。複数件更新したい場合は「Many Documents」を選択します。
    • Upsert: true に設定すると、Filter条件に合致するドキュメントが見つからなかった場合に、そのFilter条件とUpdateドキュメント($setOnInsertオペレーターなどを含む)を基に新しいドキュメントが挿入されます。通常は false で問題ありません。
  5. プレビューと実行: 設定したFilterとUpdateドキュメントに基づいて、更新対象となるドキュメント数などが表示されます。内容を確認し、「Update」ボタン(または「Update Multiple」ボタン)をクリックします。
  6. 確認: 本当に更新を実行するか確認を求められます。更新対象のドキュメント数などが表示されるので、意図した通りの操作か最終確認し、「Update」ボタンをクリックします。

更新が完了すると、成功したドキュメント数などが表示されます。Documentsタブに戻ると、変更が反映されていることが確認できます(必要に応じてRefreshボタンをクリック)。

4.4 ドキュメントの削除(Delete)

既存のドキュメントをコレクションから削除する方法です。

4.4.1 単一ドキュメントの削除

特定のドキュメントを削除したい場合は、そのドキュメントを選択して削除します。

  1. 削除したいドキュメントを選択: Documentsタブのリストから、削除したいドキュメントを探します。必要に応じてFilterツールバーで絞り込みます。
  2. 削除アイコンをクリック: ドキュメントの行にマウスカーソルを合わせると右側に表示される「…」メニューをクリックし、「Delete Document」またはゴミ箱のアイコンをクリックします。
  3. 確認: 削除を実行するか確認を求められます。この操作は元に戻せません。内容をよく確認し、「Delete」ボタンをクリックします。

削除が成功すると、リストからそのドキュメントが消えます。

4.4.2 複数ドキュメントの一括削除

Filter条件に合致する複数のドキュメントを、一括で削除したい場合は、Documentsタブのツールバーにある「Delete」ボタンを使用します。

  1. 「Delete」ボタンをクリック: Documentsタブの上部ツールバーにある「Delete」ボタンをクリックします。
  2. Filter条件を指定: 削除対象のドキュメントを特定するためのFilter条件(JSON形式)を入力します。例えば、年齢が60歳より大きいユーザー全員を削除したい場合。
    json
    { "age": { "$gt": 60 } }

    • 重要: Filter条件が空 {} の場合、コレクション内のすべてのドキュメントが削除されます。これはコレクション自体は残りますが、中身のドキュメントがすべてなくなる操作です。意図しないデータ損失を防ぐため、Filter条件は極めて慎重に設定してください。特に、本番環境や重要なデータに対して Filter: {} で削除を実行しないように細心の注意を払ってください。
  3. プレビューと実行: 設定したFilter条件に基づいて、削除対象となるドキュメント数などが表示されます。内容を確認し、「Delete」ボタンをクリックします。
  4. 最終確認: 本当に削除を実行するか、最終確認を求められます。削除対象のドキュメント数などが表示されるので、意図した通りの操作か最終確認し、「Delete」ボタンをクリックします。この操作は元に戻せません

削除が完了すると、成功したドキュメント数などが表示されます。Documentsタブに戻ると、削除されたドキュメントが消えていることが確認できます。

4.5 データのExport(エクスポート)

Documentsタブのツールバーにある「Export Data」ボタンを使用すると、FilterやProjectで絞り込んだり整形したりした結果を、JSONやCSVファイルとしてエクスポートできます。データのバックアップや、他のシステムとの連携などに役立ちます。

  1. FilterやProjectでデータを準備 (オプション): エクスポートしたいデータだけを表示したい場合は、Filterツールバーで条件を指定します。特定のフィールドだけをエクスポートしたい場合は、Projectツールバーで条件を指定します。
  2. 「Export Data」ボタンをクリック: Documentsタブの上部ツールバーにある「Export Data」ボタンをクリックします。
  3. エクスポート設定: エクスポート設定ダイアログが表示されます。
    • Output: エクスポート形式を選択します。「JSON」または「CSV」が選択できます。
    • File Name: エクスポートするファイルの名前を入力します。
    • Path: ファイルの保存先フォルダを指定します。
    • JSON形式の場合:
      • Array of JSON documents: ドキュメントをJSON配列 [{...}, {...}] の形式で出力します。
      • JSON Lines: 各行が1つのJSONドキュメントになっている形式で出力します。
    • CSV形式の場合:
      • Include Headers: ヘッダー行(フィールド名)を含めるか選択します。
      • Delimiter: フィールドの区切り文字を指定します(カンマ,が一般的)。
      • Export Fields: エクスポートするフィールドをリストで指定します。_id フィールドを含めるかどうかもここで設定できます。Projectツールバーで指定した投影条件がここに自動的に反映されることがありますが、必要に応じて手動で調整できます。
  4. 「Export」ボタンをクリック: 設定が完了したら、「Export」ボタンをクリックします。

エクスポートが開始され、進行状況が表示されます。完了すると、指定した場所にファイルが作成されます。

CRUD操作はデータベース操作の基本です。CompassのGUIを使うことで、コマンドを覚えることなくこれらの操作を直感的に実行できます。Filter、Project、Sortといったクエリ機能もGUIで試行錯誤しながら使えるため、MongoDBのクエリ構文を学ぶ上でも非常に良い練習になります。

次の章では、SchemaタブやIndexesタブといった、コレクションの構造やパフォーマンスに関連する機能について基本的な部分を解説します。

第5章:スキーマの理解とインデックスの活用(基礎)

CompassのDocumentsタブでのCRUD操作に慣れてきたら、コレクションの構造やパフォーマンスをより深く理解するために、SchemaタブとIndexesタブを見てみましょう。

5.1 Schema タブでデータ構造を把握する

MongoDBはスキーマレス(厳密にはフレキシブルスキーマ)ですが、これは「スキーマが存在しない」という意味ではなく、「スキーマが固定されていない、柔軟である」という意味です。同じコレクション内のドキュメントでも、異なるフィールドを持っていたり、フィールドのデータ型が異なっていたりする可能性があります。

Schemaタブは、コレクション内のドキュメントをランダムにサンプリングし、その結果を分析して、コレクション全体の一般的なデータ構造や、データのばらつきを把握するのに役立ちます。

  1. Schemaタブを選択: Collections詳細画面で「Schema」タブをクリックします。
  2. サンプリングの実行: 初めてSchemaタブを開いたときや、データが更新された後などは、「Analyze Schema」または「Run Schema Analysis」のようなボタンが表示されることがあります。これをクリックすると、Compassがコレクションから一定数のドキュメントを読み込んで分析を開始します。ドキュメント数が多いコレクションでは、サンプリングに時間がかかる場合があります。
  3. 分析結果の確認: 分析が完了すると、以下のような情報が表示されます。
    • フィールドリスト: コレクション内のドキュメントで検出されたすべてのフィールド名がリストされます。
    • データ型: 各フィールドについて、検出されたデータ型とその出現率が表示されます(例: name フィールドは100% String型、age フィールドは80% Number型、20% Null型、といった情報)。もし同じフィールド名で複数のデータ型が出現している場合(例: あるドキュメントではString、別のドキュメントではNumber)、それが表示され、データのばらつきがあることがわかります。
    • データ分布: String型フィールドの場合はユニークな値の数や最も一般的な値、Number型フィールドの場合は最小値・最大値・平均値、Date型の場合は日付の範囲などが表示されます。
    • Missing %: そのフィールドがドキュメント中に存在しない割合が表示されます。この割合が高いフィールドは、多くのドキュメントで欠落しているフィールドであることがわかります。

Schemaタブの分析結果を見ることで、自分の思っていた通りのデータ構造になっているか、あるいは意図しないデータ型や欠落フィールドが多くないかなどをチェックできます。これは、アプリケーション開発やデータクレンジングの際に非常に役立ちます。

5.2 Indexes タブでインデックスを管理する

インデックスは、データベースの検索性能を向上させるための仕組みです。本の索引のように、特定のフィールドの値に基づいてドキュメントを効率的に探し出すことができます。適切なインデックスが存在しない場合、MongoDBはクエリを実行する際にコレクション内のすべてのドキュメントを順番に調べる必要があり(フルコレクションスキャン)、データ量が多いと非常に遅くなります。

Indexesタブでは、コレクションに現在定義されているインデックスを確認したり、新しいインデックスを作成したり、不要なインデックスを削除したりできます。

  1. Indexesタブを選択: Collections詳細画面で「Indexes」タブをクリックします。
  2. 既存インデックスの確認: コレクションに存在するインデックスのリストが表示されます。
    • _id_: MongoDBがコレクション作成時に自動的に作成するデフォルトのインデックスです。_id フィールドはすべてのドキュメントで一意であるため、このインデックスは非常に重要です。
    • その他のインデックス: 自分で作成したインデックスが表示されます。各インデックスについて、どのフィールドに(昇順/降順どちらで)、どのようなオプション(ユニーク、スパース、TTLなど)が設定されているかが表示されます。
    • インデックスのサイズ(Size)、使用回数(Usage)などの統計情報も表示される場合があります。
  3. 新しいインデックスの作成: 新しいインデックスを作成したい場合は、「Create Index」ボタンをクリックします。
    • Fields: インデックスを作成したいフィールドと、その順序(昇順 1 または降順 -1)を指定します。複数のフィールドを組み合わせた複合インデックスも作成できます。「Add Field」ボタンをクリックしてフィールドを追加します。
      例えば、name フィールドで昇順、age フィールドで降順の複合インデックスを作成する場合:
      フィールド1: Key: name, Order: Ascending (1)
      フィールド2: Key: age, Order: Descending (-1)
    • Options: インデックスに関するオプションを設定します。
      • Unique: このインデックスのフィールドの値がコレクション全体で一意であることを強制します。
      • Partial Index: 特定のFilter条件に合致するドキュメントのみにインデックスを作成します。
      • TTL Index: 指定した時間を経過したドキュメントを自動的に削除するインデックスです。セッション情報やログデータなど、一定期間後に不要になるデータに有効です。
      • Sparse: インデックス対象のフィールドが存在しないドキュメントをインデックスに含めません。
      • Collation: テキスト検索やソートにおける言語固有のルールを指定します。
    • Name (Optional): インデックスに任意の名前を付けることができます。指定しない場合、MongoDBがフィールド名と順序から自動的に名前を生成します。
  4. 「Create Index」ボタンをクリック: 設定が完了したら、画面下部にある「Create Index」ボタンをクリックします。インデックスの作成が開始され、完了するとリストに追加されます。コレクション内のドキュメント数が多い場合、インデックスの作成には時間がかかることがあります。
  5. インデックスの削除: 不要になったインデックスを削除するには、そのインデックスの行にマウスカーソルを合わせると表示されるゴミ箱アイコンをクリックします。確認ダイアログが表示されるので、問題なければ削除を実行します。

インデックスはクエリパフォーマンスに大きな影響を与えますが、インデックス自体のサイズやメンテナンスのコスト(データの追加・更新・削除時にインデックスも更新する必要があるため)も考慮が必要です。どのフィールドにインデックスを作成すべきかは、よく実行されるクエリやソート条件、そしてデータの特徴(カーディナリティなど)によって変わってきます。Explain Planタブと組み合わせて、インデックスの効果を検証するのも良いでしょう。

第6章:アグリゲーションパイプラインの紹介(入門)

MongoDBのアグリゲーションフレームワークは、データの集計や複雑な変換を行うための強力な機能です。SQLでいうところの GROUP BY, JOIN (厳密には異なりますが概念的に近い), 集計関数(SUM, AVG, COUNTなど)を組み合わせたような操作を、ドキュメント指向の方式で行えます。

CompassのAggregationsタブは、このアグリゲーションパイプラインを視覚的に構築・テストできる非常に便利なツールです。初心者の方は、まずここでアグリゲーションの概念に触れてみるのがおすすめです。

  1. Aggregationsタブを選択: Collections詳細画面で「Aggregations」タブをクリックします。
  2. 「Add Stage」ボタン: アグリゲーションパイプラインは、複数の「ステージ」を順番に実行することでデータを変換していきます。最初のステージを追加するには、「Add Stage」ボタンをクリックします。
  3. ステージの選択と設定: 新しいステージが追加され、その設定を行うエディターが表示されます。最もよく使われる基本的なステージをいくつか紹介します。

    • $match: ドキュメントをフィルタリングするステージです。DocumentsタブのFilterと同様に、クエリ条件を指定して、後続のステージに渡すドキュメントを絞り込みます。例えば、年齢が30歳以上のユーザーのみを対象にする場合:
      json
      { "$match": { "age": { "$gte": 30 } } }

      Filterと同じ構文が使えます。
    • $group: 指定したキーに基づいてドキュメントをグループ化し、各グループに対して集計演算を実行するステージです。例えば、都市ごとにユーザー数をカウントする場合:
      json
      { "$group": { "_id": "$city", "count": { "$sum": 1 } } }

      • _id フィールドでグループ化のキーを指定します。"$city" は、ドキュメントの city フィールドの値をグループキーとして使用することを意味します(フィールド名の前に $ を付けます)。
      • "count" は新しく作成されるフィールド名です。
      • { "$sum": 1 } は集計演算子です。ここでは、グループ内のドキュメントごとに 1 を加算することで、ドキュメント数をカウントしています。他の集計演算子には $avg (平均), $sum (合計), $min (最小値), $max (最大値) などがあります。
    • $sort: ドキュメントを並べ替えるステージです。DocumentsタブのSortと同様に、ソート条件を指定します。例えば、カウントが多い順(降順)に並べ替える場合($group の後に続くステージとして):
      json
      { "$sort": { "count": -1 } }
    • $project: ドキュメントのフィールドを整形・選択するステージです。DocumentsタブのProjectと同様に、表示するフィールドや新しいフィールドの作成を指定します。例えば、_id フィールドの名前を city に変更し、count フィールドだけを表示する場合:
      json
      { "$project": { "_id": 0, "city": "$_id", "userCount": "$count" } }

      ここでは、_id を非表示 (_id": 0) にし、元の _id フィールド(グループキーである都市名)を city という新しいフィールド名で表示し、元の count フィールドを userCount という新しいフィールド名で表示しています。
    • $limit, $skip: 表示するドキュメント数を制限したり、スキップしたりするステージです。ページネーションなどに使用します。
  4. パイプラインの構築: 「Add Stage」ボタンを繰り返しクリックして、必要なステージを順番に追加していきます。ステージの順番は非常に重要です。例えば、$match はできるだけ早い段階で行うことで、後続のステージの処理対象となるドキュメント数を減らし、パフォーマンスを向上させられます。

  5. 結果の確認: 各ステージを追加・設定するたびに、そのステージを実行した結果が画面下部の「Results」エリアに表示されます。これにより、パイプラインの各段階でのデータの変化を確認しながら、意図した通りの処理ができているかを確認できます。
  6. パイプラインのエクスポート: 構築したパイプラインは、JSON形式でエクスポートしたり、様々なプログラミング言語(Node.js, Python, Javaなど)のコードとしてエクスポートしたりできます。これにより、Compassで試行錯誤して作成したパイプラインを、実際のアプリケーションコードに簡単に組み込むことができます。

アグリゲーションは最初は少し難しく感じるかもしれませんが、CompassのAggregationsタブを使えば、各ステージの入力と出力をリアルタイムで確認しながら学習できます。最初は簡単な $match$group から試してみるのがおすすめです。

第7章:初心者向け実践TIPSとまとめ

最後に、初心者の方がMongoDB Compassをより快適に使うための実践的なTIPSと、ここまでの内容のまとめを行います。

7.1 実践TIPS

  • 接続情報の保存: 頻繁に使う接続設定は必ず保存(Favorite)しておきましょう。接続文字列を毎回入力する手間が省けます。
  • Filter/Project/Sortの入力補完: DocumentsタブのFilter, Project, Sortフィールドでは、入力補完機能が利用できます。フィールド名や演算子の入力中に候補が表示されるので、タイプミスを防ぎ、効率的に入力できます。
  • JSONビューとテーブルビューの切り替え: ドキュメントの表示形式は、データの構造に応じて切り替えてみましょう。シンプルなデータならテーブルビューが見やすい場合があります。
  • Explain Planでクエリを確認: 特にFilterやSort条件を指定したクエリのパフォーマンスに疑問を持ったら、Explain Planタブで実行計画を確認する癖をつけましょう。インデックスが使われているかどうかが分かります。
  • サンプルデータで練習: 新しい機能(特にAggregationなど)を試すときは、重要なデータではなく、テスト用のデータベースやコレクション、あるいはCompassが提供するサンプルデータセットを使用して練習するのが安全です。Compassは起動画面などからサンプルデータセットを簡単に読み込む機能を提供しています。
  • 削除・更新操作は慎重に: Filterを使った複数ドキュメントの更新・削除は、誤った条件を指定すると大量のデータを失うリスクがあります。特にFilterが空の状態で削除を実行すると全件削除になります。重要な操作の前には、対象ドキュメント数を確認したり、事前にデータをエクスポートしてバックアップを取ったりするなどの対策を検討しましょう。
  • 公式ドキュメントの活用: Compassの各機能についてさらに詳しく知りたい場合は、MongoDBの公式ドキュメント(英語が主ですが、日本語訳も一部あります)を参照しましょう。Compassの機能は常に進化しています。

7.2 まとめ:CompassでMongoDB学習を加速しよう!

この記事では、MongoDB Compassのインストールから始まり、データベースへの接続、基本的なインターフェースの解説、そしてドキュメントのCRUD操作、さらにはスキーマ、インデックス、アグリゲーションといった少し進んだ機能の入門までを詳しく解説しました。

MongoDB Compassは、コマンドライン操作が苦手な初心者にとって、MongoDBの学習を始める上での強力な味方となります。

  • 視覚的にデータベースやコレクションの構造を理解できる。
  • 直感的なGUI操作でデータの追加・編集・削除ができる。
  • FilterやSort条件を試しながら、MongoDBのクエリ構文を自然に学べる。
  • スキーマ分析やインデックス管理、アグリゲーションといった、MongoDBの強力な機能を体験できる。

これらの利点を活かすことで、MongoDBの仕組みや操作方法に対する理解を深め、学習曲線を大きく緩やかにすることができるでしょう。

もちろん、Compassだけですべての操作ができるわけではありませんし、本格的なアプリケーション開発では各種プログラミング言語用のドライバーや、より高度なCLIツール(mongosh など)を使用することになります。しかし、Compassで基本的な操作やデータ構造に慣れておくことは、その後の学習において大きなアドバンテージとなります。

まずはローカル環境にMongoDBサーバーとCompassをインストールし、この記事を参考にしながら実際に手を動かしてみてください。簡単なデータを作成・操作してみることから始め、徐々にFilterやAggregationといった機能にも挑戦してみましょう。

MongoDB Compassが、あなたのMongoDB学習の旅をよりスムーズで楽しいものにしてくれることを願っています!

これで、MongoDB Compassの初心者向け詳細ガイドは終わりです。


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール