【簡単】MongoDBインストール手順と始め方


【簡単】MongoDBインストール手順と始め方:詳細ガイド

リレーショナルデータベース(RDBMS)が主流のデータベース技術として長く君臨してきましたが、近年、Webアプリケーションやモバイルアプリ開発、IoT、ビッグデータ処理など、多様なデータ形式や高いスケーラビリティが求められる分野において、NoSQLデータベースが注目されています。その中でも、特に人気が高く、広く利用されているのがMongoDBです。

MongoDBは、ドキュメント指向のNoSQLデータベースであり、JSONライクな柔軟な形式でデータを扱うことができます。RDBMSのように固定されたスキーマを持つ必要がないため、開発の迅速化や変化への対応が容易になります。また、水平方向へのスケールアウトに優れており、大量のデータやトラフィックにも対応できる設計となっています。

この記事では、MongoDBを始めるための第一歩として、Windows、macOS、Linuxといった主要なOS環境にMongoDBをインストールし、基本的な操作を行うまでの手順を、初心者の方にも分かりやすく詳細に解説します。約5000語というボリュームで、各ステップでの注意点や、コマンドの意味、GUIツールの活用法なども網羅しています。

この記事を通じて、MongoDBの世界へスムーズに入り、その強力な機能を使い始めるための基盤をしっかりと築きましょう。

1. はじめに:MongoDBとは何か、なぜ選ばれるのか

MongoDBのインストールに進む前に、まずはMongoDBがどのようなデータベースであり、なぜ多くの開発者や企業に選ばれているのかを理解しておきましょう。

1.1. MongoDBとは? ドキュメント指向データベースの力

MongoDBは、MongoDB, Inc.によって開発されている、オープンソースのドキュメント指向データベースです。これは、RDBMSがデータを「テーブル(表)」と「行」で管理するのに対し、MongoDBはデータを「ドキュメント」と呼ばれる単位で管理することを意味します。

ドキュメントは、キーと値のペアの集まりであり、JSON(JavaScript Object Notation)によく似た形式(BSON – Binary JSON)で表現されます。このドキュメントは、RDBMSにおける「行」に相当しますが、より複雑で階層的な構造を持つことができます。例えば、ユーザー情報に加えて、そのユーザーが持っている複数の電話番号や住所といった関連情報を、別テーブルに分けることなく、一つのドキュメントの中に埋め込んで格納することが可能です。

ドキュメントは「コレクション」と呼ばれるグループにまとめられます。コレクションは、RDBMSにおける「テーブル」に相当しますが、コレクション内のドキュメントは互いに厳密に同じ構造(スキーマ)を持つ必要がありません。これが「スキーマレス」あるいは「フレキシブルスキーマ」と呼ばれるMongoDBの大きな特徴の一つです。

1.2. なぜMongoDBを選ぶのか? 主なメリット

MongoDBが広く普及しているのには、いくつかの理由があります。主なメリットを挙げます。

  • 柔軟なスキーマ(Schema Flexibility): 前述の通り、コレクション内のドキュメントは固定されたスキーマを持ちません。これにより、要件の変化に合わせてデータ構造を容易に変更したり、アプリケーションの進化に合わせて新しいフィールドを追加したりするのが非常に簡単になります。アジャイル開発や、データ構造が確定していない初期段階の開発に適しています。
  • 開発の容易さ: JSONライクなドキュメント形式は、Web開発でよく使われるJSONと親和性が高いため、アプリケーション開発者はデータベースとのデータのやり取りを直感的に行えます。多くのプログラミング言語に対応した公式・非公式のドライバーが提供されており、アプリケーションへの組み込みも容易です。
  • 高いスケーラビリティ(Scalability): MongoDBは、シャーディングと呼ばれる技術を用いて水平方向へのスケールアウトを容易に行えるように設計されています。データを複数のサーバーに分散させることで、データ量の増加やトラフィックの急増に対応できます。また、レプリケーション機能により、データの冗長性を確保し、可用性を高めることも可能です。
  • 豊富な機能: クエリ言語(MongoDB Query Language – MQL)は非常に強力で、多様な検索条件を指定したり、集計処理(Aggregation Framework)を行ったりすることができます。また、地理空間インデックスや全文検索インデックスなど、特殊なインデックスをサポートしており、様々な種類のアプリケーションに対応できます。
  • コミュニティとエコシステム: オープンソースであるため、活発なコミュニティが存在します。多くの開発者によって情報が共有されており、問題解決のためのリソースが豊富です。また、MongoDB CompassのようなGUIツールや、各種クラウドプロバイダーが提供するマネージドサービスなど、エコシステムも充実しています。

1.3. この記事で学ぶこと

この記事では、これらのメリットを持つMongoDBを実際に使い始めるために、以下の内容を学びます。

  • MongoDBをインストールするためのシステム要件の確認
  • MongoDB Community Editionの選択
  • Windows、macOS、Linux(Ubuntu/Debian, CentOS/RHEL/Fedora)それぞれのOSにおけるMongoDBのインストール手順を詳細に解説
  • MongoDBサーバーの起動と停止方法
  • MongoDBシェル(mongoまたはmongosh)を使った基本的なデータベース操作(データベース/コレクションの作成・選択、ドキュメントの挿入・検索・更新・削除)
  • GUIツールであるMongoDB Compassの利用方法
  • MongoDBの基本的な概念(ドキュメント、コレクション、データベース、スキーマレスなど)の理解
  • よくある問題とその解決策
  • 次の学習ステップへのヒント

それでは、早速MongoDBのインストール準備から始めていきましょう。

2. システム要件の確認

MongoDBをインストールする前に、お使いのシステムがMongoDBを動作させるための要件を満たしているかを確認することが重要です。MongoDBは様々なOSに対応していますが、バージョンによってサポートされるOSのバージョンやアーキテクチャが異なります。

2.1. 対応OS

MongoDB Community Editionは、以下の主要なOSプラットフォームの特定のバージョンでサポートされています。

  • Windows: Windows Server (特定のバージョン), Windows (特定のバージョン)
  • macOS: macOS (特定のバージョン)
  • Linux:
    • Amazon Linux 2
    • CentOS / RHEL / Oracle Linux (特定のバージョン)
    • Debian (特定のバージョン)
    • Fedora (特定のバージョン)
    • Linux Mint (特定のバージョン)
    • SUSE Linux Enterprise Server (特定のバージョン)
    • Ubuntu (特定のバージョン)

重要: インストールするMongoDBのバージョン(例: 6.0, 5.0, 4.4など)によって、サポートされるOSのバージョンが異なります。最新のMongoDBバージョンをインストールする場合は、MongoDB公式ドキュメントの「Supported Platforms」のページで、お使いのOSバージョンがサポートされているかを必ず確認してください。古いOSバージョンでは、最新のMongoDBがインストールできない場合があります。

2.2. 必要なリソース

MongoDB自体は、システムリソースを比較的効率的に使用するように設計されていますが、データベースの規模やトラフィック量に応じて、必要なリソースは大きく変動します。開発環境や小規模なアプリケーションであれば、一般的なPCスペックでも十分動作しますが、本番環境や大規模な利用を想定する場合は、以下の点を考慮する必要があります。

  • RAM (メモリ): MongoDBは、可能な限り多くのデータをメモリにキャッシュしようとします。これにより、ディスクI/Oを減らし、クエリのパフォーマンスを向上させます。したがって、十分なRAMを搭載しているほど、パフォーマンスが向上します。開発環境では数GBでも動作しますが、本番環境ではデータのワーキングセット(頻繁にアクセスされるデータ)がメモリに収まるだけのRAMを用意するのが理想的です。
  • ストレージ: データベースのサイズに応じてストレージ容量が必要です。MongoDBはデフォルトでWiredTigerストレージエンジンを使用し、データの圧縮をある程度行いますが、データ量が増えればそれに応じたディスク容量が必要になります。また、データベースのパフォーマンスはストレージのアクセス速度に大きく影響されるため、可能であればSSD(Solid State Drive)の使用が推奨されます。
  • CPU: 一般的なアプリケーションでは、CPUがボトルネックになることは少ないですが、複雑なクエリや集計処理を頻繁に行う場合は、高性能なCPUが有効です。

開発や学習目的であれば、お手持ちのPCスペックで問題ない場合がほとんどです。ただし、インストール中に一時的にストレージ容量を消費したり、サービス起動後にデフォルトのポート(27017)を使用するため、他のアプリケーションとポートが衝突しないかなども確認しておくと良いでしょう。

3. MongoDB Community Editionの選択

MongoDBには主に「Community Edition」と「Enterprise Edition」があります。これからMongoDBを始める方や、学習目的、小規模なアプリケーション開発などであれば、「Community Edition」で十分です。

3.1. Community EditionとEnterprise Editionの違い

  • Community Edition: オープンソースで無償で利用できます。MongoDBの主要な機能のほとんどが含まれており、多くのユースケースに対応可能です。開発環境や中小規模のプロダクション環境で広く利用されています。
  • Enterprise Edition: 商用ライセンスが必要なエディションです。Community Editionの機能に加えて、高度なセキュリティ機能(Kerberos認証、監査ログなど)、高度な監視ツール、オンプレミスでのマネージドサービス(Ops Manager)、認定済みのプラットフォームサポートなどが含まれます。主に大規模な企業や、厳しいセキュリティ要件を持つ環境で利用されます。

3.2. Community Editionで十分な理由

この記事はMongoDBのインストールと始め方に焦点を当てているため、無償で入手でき、基本的な機能がすべて揃っているCommunity Editionをインストールします。Enterprise Editionで提供される高度な機能は、より大規模な運用や特定のエンタープライズ要件に関わるものであり、MongoDBの学習や基本的なアプリケーション開発には必要ありません。

したがって、以下の手順ではMongoDB Community Editionのインストール方法を解説します。

4. MongoDBのインストール (OS別詳細)

いよいよMongoDBのインストール手順に入ります。OSによってインストール方法が異なりますので、お使いのOSの手順をご確認ください。

4.1. Windowsへのインストール

Windowsへのインストールは、公式インストーラー(MSIファイル)を使用するのが最も簡単です。

ステップ1: インストーラーのダウンロード

  1. MongoDB公式サイトのダウンロードページにアクセスします。https://www.mongodb.com/try/download/community
  2. Platformとして「Windows」を選択し、Architectureとして「x64」を選択します。Packageは「msi」を選択します。
  3. 「Download」ボタンをクリックして、インストーラーファイル(.msi 拡張子)をダウンロードします。

ステップ2: インストーラーの実行

  1. ダウンロードした.msiファイルをダブルクリックして実行します。
  2. インストーラーが起動し、「Welcome」画面が表示されます。「Next」をクリックします。
  3. 「End-User License Agreement」が表示されます。内容を確認し、「I accept the terms in the License Agreement」にチェックを入れて「Next」をクリックします。
  4. 「Choose Setup Type」画面が表示されます。
    • Complete」(完全インストール): 推奨されるオプションです。MongoDBサーバー、コマンドラインツール、設定ファイルなど、必要なコンポーネントがすべてインストールされます。
    • Custom」(カスタムインストール): インストールするコンポーネントやインストール先ディレクトリを自分で選択できます。特別な理由がない限り、「Complete」を選択するのが簡単です。
      今回は「Complete」を選択して進めます。

ステップ3: サービス設定 (Completeインストールの場合)

「Complete」を選択した場合、「Service Configuration」画面が表示されます。ここでは、MongoDBをWindowsサービスとしてインストールするかどうかを設定します。Windowsサービスとしてインストールすると、OS起動時に自動的にMongoDBサーバーが起動するように設定でき、手動でサーバーを起動する手間が省けます。

  1. “Install MongoDB as a Service”: 通常はこのオプションにチェックを入れたままにします。
  2. “Run service as Network Service user”: ネットワークサービスユーザーとしてサービスを実行します。特別な理由がない限り、このデフォルト設定で問題ありません。
  3. “Run service as a Local or Domain User”: 特定のユーザーアカウントでサービスを実行したい場合に選択します。高度な設定が必要な場合にのみ使用します。
  4. “Service Name”: サービスの名称を指定します。デフォルトは「MongoDB」です。複数のMongoDBインスタンスをインストールする場合などで変更が必要になることがあります。
  5. “Data Directory”: データベースファイルが格納されるディレクトリです。デフォルトは C:\Program Files\MongoDB\Server\<version>\data です。変更したい場合は「Browse…」で指定します。十分な空き容量があるドライブを選択してください。
  6. “Log Directory”: ログファイルが格納されるディレクトリです。デフォルトは C:\Program Files\MongoDB\Server\<version>\log です。変更したい場合は「Browse…」で指定します。
    設定を確認し、「Next」をクリックします。

ステップ4: MongoDB Compassのインストール

「Install MongoDB Compass」画面が表示されます。MongoDB CompassはMongoDBを操作するためのGUIツールです。初心者には非常に便利なので、通常は「Install MongoDB Compass」にチェックを入れたまま「Next」をクリックします。

ステップ5: インストールの開始

「Ready to Install the Program」画面が表示されます。設定内容を確認し、「Install」をクリックします。

ユーザーアカウント制御(UAC)のダイアログが表示された場合は、「はい」をクリックしてインストールを許可します。

インストールが開始され、プログレスバーが表示されます。しばらく待ちます。

ステップ6: インストールの完了

インストールが完了すると、「Completed the MongoDB Setup Wizard」画面が表示されます。「Finish」をクリックしてインストーラーを閉じます。

ステップ7: 環境変数PATHの設定 (オプション)

MongoDBのコマンドラインツール(mongod.exe, mongo.exe または mongosh.exe)をどのディレクトリからでも実行できるように、環境変数PATHにMongoDBのbinディレクトリを追加することをおすすめします。

  1. Windowsの検索バーに「環境変数」と入力し、「システム環境変数の編集」を選択します。
  2. 「システムのプロパティ」ダイアログが表示されます。「詳細設定」タブの「環境変数」ボタンをクリックします。
  3. 「環境変数」ダイアログが表示されます。システム環境変数の一覧から「Path」を選択し、「編集」ボタンをクリックします。
  4. 「環境変数名の編集」ダイアログが表示されます。「新規」をクリックし、MongoDBのbinディレクトリのパスを追加します。
    デフォルトでCompleteインストールした場合のパスは以下のようになります(バージョン番号はインストールしたバージョンに合わせてください)。
    C:\Program Files\MongoDB\Server\<version>\bin
  5. 追加したら、「OK」を繰り返しクリックしてすべてのダイアログを閉じます。

これで、コマンドプロンプトやPowerShellからmongodmongo(またはmongosh)コマンドを実行できるようになります。

ステップ8: インストール後の確認

  1. コマンドプロンプトまたはPowerShellを起動します。
  2. MongoDBサーバーがWindowsサービスとして起動しているか確認します。サービスが自動起動に設定されていれば、PC起動後に自動で起動しています。手動で起動する場合は、Windowsの検索バーに「サービス」と入力し、「サービス」アプリを起動します。「MongoDB」という名前のサービスを探し、状態が「実行中」になっているか確認します。もし実行中でなければ、右クリックして「開始」を選択します。
  3. MongoDBシェルに接続できるか確認します。コマンドプロンプトまたはPowerShellで以下を実行します。
    bash
    mongo
    # または、インストールしたバージョンによっては mongosh
    mongosh

    シェルのプロンプトが表示されれば(例: test> または mongosh >)、正常に接続できています。exit または quit() と入力してシェルを終了します。
  4. MongoDB Compassがインストールされているか確認します。WindowsのスタートメニューにMongoDB Compassのアイコンが追加されているはずです。起動して、デフォルト設定(mongodb://localhost:27017)で接続できるか確認してみてください。

これでWindowsへのMongoDB Community Editionのインストールは完了です。

4.2. macOSへのインストール

macOSでは、パッケージマネージャーであるHomebrewを使ったインストールが最も推奨されます。簡単かつ、アップデートなどの管理が容易になるためです。

ステップ1: Homebrewのインストール (もし未インストールなら)

Homebrewがまだインストールされていない場合は、まずHomebrewをインストールします。ターミナルアプリを開き、以下のコマンドを実行します。

bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

画面の指示に従ってインストールを完了させてください。インストール後、指示があればPATHの設定やターミナルの再起動を行います。

ステップ2: Homebrewのリポジトリの追加

MongoDB Community EditionはHomebrewの標準リポジトリには含まれていません。MongoDB公式が提供するHomebrewリポジトリ(タップ)を追加する必要があります。

ターミナルで以下のコマンドを実行します。

bash
brew tap mongodb/brew

ステップ3: Homebrewの更新

念のためHomebrewを最新の状態に更新しておきます。

bash
brew update

ステップ4: MongoDB Community Editionのインストール

以下のコマンドを実行してMongoDB Community Editionをインストールします。

bash
brew install mongodb-community@<version>

<version> の部分にはインストールしたいバージョンを指定します(例: 6.0, 5.0, 4.4)。特定のバージョンを指定しない場合、最新バージョンがインストールされますが、将来の互換性などを考慮してバージョン指定することをおすすめします。例えば、バージョン6.0をインストールする場合は以下のようになります。

bash
brew install [email protected]

インストールにはしばらく時間がかかる場合があります。

ステップ5: MongoDBサーバーの起動

Homebrewを使ってインストールした場合、MongoDBサーバーをHomebrewのサービスとして起動するのが便利です。これにより、システム起動時に自動的にMongoDBサーバーが起動するように設定できます。

bash
brew services start mongodb-community@<version>

<version> はインストール時に指定したバージョンに合わせます。例えば、バージョン6.0の場合は以下です。

bash
brew services start [email protected]

サービスとして起動せず、手動で起動したい場合は、以下のコマンドを実行します(-fオプションはフォアグラウンドで起動します)。

bash
mongod --config /usr/local/etc/mongod.conf

上記コマンドでエラーが出る場合は、Homebrewが自動で作成した設定ファイルのパスを確認してください。通常は/usr/local/etc/mongod.conf/opt/homebrew/etc/mongod.conf(Apple Silicon Macの場合)に作成されます。データディレクトリは/usr/local/var/mongodb/opt/homebrew/var/mongodb、ログディレクトリは/usr/local/var/log/mongodb/opt/homebrew/var/log/mongodbに設定されていることが多いです。必要に応じてディレクトリを作成し、mongod --dbpath <データディレクトリのパス> のように--dbpathオプションを指定して起動することも可能です。

ステップ6: インストール後の確認

  1. MongoDBサーバーがサービスとして起動しているか確認します。

    bash
    brew services list

    一覧にmongodb-communityが含まれており、StatusがstartedになっていればOKです。
    2. MongoDBシェルに接続できるか確認します。ターミナルで以下を実行します。

    “`bash
    mongosh

    または、Homebrewのシンボリックリンクがまだ設定されていない場合、フルパスで実行

    /usr/local/opt/mongodb-community@/bin/mongosh

    “`

    シェルのプロンプトが表示されれば正常です。exit または quit() でシェルを終了します。
    3. MongoDB Compassをインストールした場合は、アプリケーションフォルダから起動して接続できるか確認します。HomebrewインストールではCompassは自動インストールされないため、別途公式サイトからダウンロードしてインストールする必要があります。

これでmacOSへのMongoDB Community Editionのインストールは完了です。

4.3. Linuxへのインストール (apt/yum/dnf)

Linuxへのインストールは、ディストリビューションのパッケージマネージャー(apt, yum, dnfなど)を使用するのが最も標準的です。MongoDB公式が提供するパッケージリポジトリを追加してインストールします。ここでは、代表的なディストリビューションであるUbuntu/Debian (apt) と CentOS/RHEL/Fedora (yum/dnf) の手順を解説します。

重要: 以下のコマンドは、root権限またはsudo権限を持つユーザーで実行する必要があります。

共通の注意点:

  • インストールするMongoDBのバージョンによって、リポジトリの設定方法やパッケージ名が異なる場合があります。必ずMongoDB公式ドキュメントの「Install MongoDB Community Edition」ページで、お使いのディストリビューションとバージョンに合った最新の手順を確認してください。
  • systemctlコマンドは、systemdを使用している新しいディストリビューションで利用できます。古いSysVinitシステムの場合はserviceコマンドなどを使用します。現在の多くのLinuxディストリビューションはsystemdを採用しています。

4.3.1. Ubuntu / Debian (apt)

UbuntuやDebianでは、APTパッケージマネージャーを使用します。

ステップ1: GPGキーのインポート

MongoDBパッケージの信頼性を確認するための公開GPGキーをインポートします。

bash
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

(注: バージョンによってはURLが異なる場合があります。最新情報は公式ドキュメントを確認してください。例: 4.4の場合はserver-4.4.asc)

ステップ2: MongoDBリポジトリの追加

使用しているUbuntu/Debianのバージョンに対応するMongoDBリポジトリを/etc/apt/sources.list.d/ディレクトリ内のファイルとして追加します。ここでは、Ubuntu 22.04 (Jammy) および MongoDB 6.0 を例に説明します。

まず、システムのコードネームを確認します。(例: lsb_release -sc または /etc/os-releaseVERSION_CODENAME

bash
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

*(注: jammy はUbuntu 22.04のコードネーム、6.0 はMongoDBのバージョンです。お使いの環境に合わせて変更してください。例えば、Ubuntu 20.04 (Focal) なら focal、MongoDB 5.0 なら 5.0 となります。また、アーキテクチャも確認してください。arm64版も用意されています。)

ステップ3: パッケージリストの更新

新しいリポジトリの情報をシステムに認識させるために、パッケージリストを更新します。

bash
sudo apt update

ステップ4: MongoDBパッケージのインストール

mongodb-orgパッケージをインストールします。このパッケージは、MongoDBサーバー(mongod)、シェル(mongosh)、クライアントツール、その他のユーティリティ(mongodump, mongorestore, mongoimport, mongoexportなど)を含むメタパッケージです。

bash
sudo apt install -y mongodb-org

インストール中に、MongoDBサーバーが自動的に起動し、システム起動時に自動起動するように設定される場合があります。

ステップ5: MongoDBサーバーの起動と状態確認

インストール後、MongoDBサーバー(mongodプロセス)がsystemdサービスとして登録されます。以下のコマンドで起動、自動起動設定、状態確認を行います。

  • 起動:
    bash
    sudo systemctl start mongod
  • 自動起動設定:
    bash
    sudo systemctl enable mongod
  • 状態確認:
    bash
    sudo systemctl status mongod

状態がactive (running)と表示されていれば、正常に起動しています。

ステップ6: ファイアウォールの設定 (オプション)

もしサーバーにファイアウォール(例: UFW, firewalld)を設定している場合、外部からの接続を許可するために、MongoDBが使用するデフォルトポートである27017を開放する必要があるかもしれません。ただし、多くの場合、MongoDBはローカルホスト(127.0.0.1)からのみ接続を受け付けるようにデフォルト設定されています。リモートから接続できるようにする場合は、/etc/mongod.confの設定(bindIpなど)を変更し、ファイアウォールを開放する必要があります。

例 (UFW):

bash
sudo ufw allow 27017/tcp
sudo ufw enable # もしUFWが無効なら有効化

ステップ7: インストール後の確認

  1. MongoDBシェルに接続できるか確認します。

    bash
    mongosh

    シェルのプロンプトが表示されれば正常です。exit または quit() でシェルを終了します。
    2. サーバープロセスが起動しているか確認します。

    bash
    ps aux | grep mongod

    mongodプロセスが表示されていれば起動しています。

これでUbuntu/DebianへのMongoDB Community Editionのインストールは完了です。

4.3.2. CentOS / RHEL / Fedora (yum/dnf)

CentOS、RHEL、FedoraといったRed Hat系のディストリビューションでは、YUMまたはDNFパッケージマネージャーを使用します。

ステップ1: MongoDBリポジトリの作成

/etc/yum.repos.d/ ディレクトリ内に、MongoDBリポジトリを定義する.repoファイルを作成します。ここでは、CentOS 7 (el7) および MongoDB 6.0 を例に説明します。

bash
sudo vi /etc/yum.repos.d/mongodb-org-6.0.repo

エディタでファイルを開き、以下の内容を記述して保存します。(CentOS 7 / RHEL 7 の場合)

ini
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

(注: $releasever はシステムのバージョン(例: 7, 8, 9など)に自動的に置き換えられます。baseurlgpgkeyのURLは、お使いのディストリビューション、バージョン、MongoDBバージョンに合わせて変更してください。例えば、Fedora 37なら $releasever37、URLのパスも変わります。CentOS Stream 8 / RHEL 8 の場合は el8、CentOS Stream 9 / RHEL 9 の場合は el9 となります。)

例えば、CentOS Stream 8 / RHEL 8 の場合は以下のようになります。

ini
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/ 자체의 버전으로 치환이 안될경우, 8 대신 $releasever 넣어보는것 고려
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

ステップ2: MongoDBパッケージのインストール

YUMまたはDNFを使ってmongodb-orgパッケージをインストールします。

  • CentOS/RHEL 7 (YUM):
    bash
    sudo yum install -y mongodb-org
  • CentOS/RHEL 8/9, Fedora (DNF):
    bash
    sudo dnf install -y mongodb-org

インストール中に、GPGキーのインポートを確認される場合があります。内容を確認して「y」を入力し、エンターを押します。

ステップ3: MongoDBサーバーの起動と状態確認

インストール後、MongoDBサーバー(mongodプロセス)がsystemdサービスとして登録されます。以下のコマンドで起動、自動起動設定、状態確認を行います。

  • 起動:
    bash
    sudo systemctl start mongod
  • 自動起動設定:
    bash
    sudo systemctl enable mongod
  • 状態確認:
    bash
    sudo systemctl status mongod

状態がactive (running)と表示されていれば、正常に起動しています。

ステップ4: ファイアウォールの設定 (オプション)

もしサーバーにファイアウォール(例: firewalld)を設定している場合、MongoDBが使用するデフォルトポートである27017を開放する必要があるかもしれません。

例 (firewalld):

bash
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
sudo firewall-cmd --reload

ステップ5: インストール後の確認

  1. MongoDBシェルに接続できるか確認します。

    bash
    mongosh

    シェルのプロンプトが表示されれば正常です。exit または quit() でシェルを終了します。
    2. サーバープロセスが起動しているか確認します。

    bash
    ps aux | grep mongod

    mongodプロセスが表示されていれば起動しています。

これでCentOS/RHEL/FedoraへのMongoDB Community Editionのインストールは完了です。

5. MongoDBサーバーの起動と停止

インストールが完了したら、MongoDBサーバー(mongodプロセス)を適切に起動・停止できるようになることが重要です。インストール方法によって起動・停止方法が異なります。

5.1. サービスとしてインストールした場合

Windowsのサービス、macOSのHomebrewサービス、Linuxのsystemdサービスとしてインストールした場合、各OSのサービス管理ツールを使用して起動・停止・再起動を行います。

  • Windows:
    • 「サービス」アプリを起動し、「MongoDB」サービスを選択して右クリック → 「開始」「停止」「再起動」を選択します。
    • コマンドプロンプト(管理者として実行)からも可能です。
      • 起動: net start MongoDB
      • 停止: net stop MongoDB
  • macOS (Homebrew):
    • 起動: brew services start mongodb-community@<version>
    • 停止: brew services stop mongodb-community@<version>
    • 再起動: brew services restart mongodb-community@<version>
  • Linux (systemd):
    • 起動: sudo systemctl start mongod
    • 停止: sudo systemctl stop mongod
    • 再起動: sudo systemctl restart mongod
    • 状態確認: sudo systemctl status mongod

サービスとして管理すると、システム起動時に自動的にMongoDBが起動するように設定できるため便利です。

5.2. 手動で起動する場合 (mongod コマンド)

サービスとしてインストールしなかった場合や、特定の構成で一時的に起動したい場合などは、mongodコマンドを手動で実行してサーバーを起動します。

bash
mongod --dbpath <データディレクトリのパス> --logpath <ログファイルのパス> --fork

  • --dbpath <データディレクトリのパス>: 必須のオプションです。MongoDBがデータを格納するディレクトリを指定します。指定したディレクトリが存在しない場合は、事前に作成しておく必要があります。
  • --logpath <ログファイルのパス>: オプションです。ログファイルのパスを指定します。指定しない場合、ログは標準出力に表示されます。
  • --fork: オプションです。プロセスをフォーク(バックグラウンド実行)させます。このオプションを付けないと、コマンドを実行したターミナルがサーバープロセスによって専有されます。

例えば、/var/lib/mongodb/data をデータディレクトリ、/var/log/mongodb/mongod.log をログファイルとしてバックグラウンドで起動する場合(Linuxのデフォルト設定に近い例):

“`bash

必要に応じてディレクトリを作成

mkdir -p /var/lib/mongodb/data /var/log/mongodb

適切な権限を設定(mongodbユーザーで実行する場合など)

chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb

手動起動

mongod –dbpath /var/lib/mongodb/data –logpath /var/log/mongodb/mongod.log –fork
“`

手動で起動した場合の停止は、プロセスID(PID)を確認してkillコマンドで終了させるか、MongoDBシェルから終了コマンドを実行します。

シェルからの終了コマンド:

“`bash

MongoDBシェルに接続

mongosh

adminデータベースを選択

use admin

shutdownコマンドを実行

db.shutdownServer()

シェルを終了

exit
“`

db.shutdownServer() コマンドは、実行中の操作が完了するのを待って安全にサーバーを終了させます。

6. MongoDBシェル (mongo / mongosh) の利用

MongoDBシェルは、MongoDBサーバーと対話するためのコマンドラインインターフェースです。データベースの操作、管理、データ探索など、様々な作業を行うことができます。

MongoDBのバージョンによって、シェルのコマンド名が異なります。

  • MongoDB 4.4 以前: mongo
  • MongoDB 5.0 以降: mongosh (MongoDB Shell)

インストールしたMongoDBのバージョンに応じて、適切なコマンドを使用してください。本記事では、新しいmongoshコマンドを主に記述しますが、mongoコマンドでも同様の操作が可能です。

6.1. シェルの起動方法

ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行します。

“`bash
mongosh

または

mongo
“`

特に設定を変更していなければ、デフォルトでlocalhost:27017に接続されます。接続に成功すると、シェルのプロンプトが表示されます。

“`
Current Mongosh Home: /path/to/mongosh_home
… (バージョン情報など) …
connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Mongosh [email protected]


The server generated these startup warnings:
… (警告メッセージなど) …


test>
“`

プロンプトのtest>は、現在選択されているデータベースが「test」であることを示しています。MongoDBに初めて接続した場合、デフォルトで「test」データベースが選択されますが、このデータベースは特に作成しなくても存在し、データを格納するまでは物理的に作成されません。

6.2. 基本的なコマンド

MongoDBシェルでは、JavaScript構文に似たコマンドを使用してデータベースを操作します。

データベース操作

  • データベース一覧の表示: システムデータベースを含む、存在するすべてのデータベースを表示します。

    javascript
    show dbs

    例:
    admin 40.00 KiB
    config 80.00 KiB
    local 40.00 KiB
    test 40.00 KiB

    admin, config, local はMongoDBが内部的に使用するデータベースです。
    * データベースの選択/作成: 指定した名前のデータベースを選択します。もし存在しなければ、その名前のデータベースが作成されます(ただし、実際にデータやコレクションを格納するまで物理的なファイルは作成されません)。

    javascript
    use <database_name>

    例: use myappdb と入力すると、プロンプトが myappdb> に変わります。
    * 現在のデータベース名表示: 現在選択されているデータベースの名前を表示します。

    javascript
    db

    例: myappdb と入力すると myappdb が表示されます。
    * データベースの削除: 現在選択されているデータベースとその中のすべてのコレクション、ドキュメントを完全に削除します。この操作は元に戻せないので注意が必要です。

    javascript
    db.dropDatabase()

コレクション操作

  • コレクション一覧の表示: 現在選択されているデータベース内のすべてのコレクションを表示します。

    javascript
    show collections

    または

    javascript
    show tables // show collections と同じです

    * コレクションの作成: 通常、コレクションは最初のドキュメントを挿入したときに自動的に作成されるため、明示的に作成する必要はありません。しかし、特定のオプション(例: Capped Collection)を指定して作成したい場合は使用します。

    javascript
    db.createCollection("<collection_name>")

    例: db.createCollection("users")
    * コレクションの削除: 指定したコレクションとその中のすべてのドキュメントを完全に削除します。この操作も元に戻せないので注意が必要です。

    javascript
    db.<collection_name>.drop()

    例: db.users.drop()

ドキュメント操作 (CRUD: Create, Read, Update, Delete)

ドキュメント操作は、db.<collection_name>.<operation>() の形式で行います。

  • Create (挿入): コレクションに新しいドキュメントを追加します。

    • 単一ドキュメントの挿入: insertOne()

      javascript
      db.users.insertOne({
      name: "Alice",
      age: 30,
      city: "New York",
      hobbies: ["reading", "hiking"]
      })

      成功すると、挿入されたドキュメントの_idを含む結果が返されます。
      * 複数ドキュメントの挿入: insertMany()

      javascript
      db.users.insertMany([
      { name: "Bob", age: 25, city: "London" },
      { name: "Charlie", age: 35, city: "Tokyo", registered: new Date() }
      ])

      成功すると、挿入された各ドキュメントの_idを含む結果が返されます。
      * Read (検索): コレクションからドキュメントを取得します。

    • 全ドキュメントの検索: find() – コレクション内のすべてのドキュメントを取得します。デフォルトでは最初の20件程度が表示されます。さらに表示するには it と入力します。

      javascript
      db.users.find()

      * 条件を指定して検索: find(<query document>) – クエリドキュメント(検索条件を記述したドキュメント)を引数に指定します。

      “`javascript
      // ageが30より大きいドキュメントを検索
      db.users.find({ age: { $gt: 30 } })

      // nameが”Alice”でcityが”New York”のドキュメントを検索 (AND条件)
      db.users.find({ name: “Alice”, city: “New York” })

      // hobbiesに”reading”が含まれるドキュメントを検索
      db.users.find({ hobbies: “reading” })

      // OR条件 ($or)
      db.users.find({ $or: [ { age: { $lt: 30 } }, { city: “London” } ] })
      ``$gt,$lt,$eq,$ne,$in,$nin,$and,$orなど、様々なクエリ演算子が利用可能です。
      * **検索結果の整形**:
      pretty(),limit(),sort(),project()などをfind()`にチェーンして使用できます。

      “`javascript
      // 検索結果を見やすく整形
      db.users.find().pretty()

      // 上位2件のみ取得
      db.users.find().limit(2)

      // ageで昇順にソート (1:昇順, -1:降順)
      db.users.find().sort({ age: 1 })

      // nameとcityフィールドのみを取得 (_idはデフォルトで含まれるので除外する場合は0を指定)
      db.users.find({}, { name: 1, city: 1, _id: 0 })
      ``
      * **単一ドキュメントの検索**:
      findOne()` – 条件に一致する最初のドキュメントを取得します。

      javascript
      db.users.findOne({ name: "Alice" })

      * Update (更新): 既存のドキュメントを変更します。

    • 単一ドキュメントの更新: updateOne(<filter>, <update>, <options>) – 条件に一致する最初のドキュメントを更新します。

      “`javascript
      // nameが”Alice”のドキュメントのcityを”Los Angeles”に変更
      db.users.updateOne(
      { name: “Alice” },
      { $set: { city: “Los Angeles” } } // $set演算子でフィールドの値を設定/更新
      )

      // nameが”Bob”のドキュメントにemailフィールドを追加
      db.users.updateOne(
      { name: “Bob” },
      { $set: { email: “[email protected]” } }
      )

      // nameが”Charlie”のageを5歳増やす ($inc演算子)
      db.users.updateOne(
      { name: “Charlie” },
      { $inc: { age: 5 } }
      )
      ``$set,$unset,$inc,$push,$pop,$addToSet,$renameなど、様々な更新演算子が利用可能です。
      * **複数ドキュメントの更新**:
      updateMany(, ,)` – 条件に一致するすべてのドキュメントを更新します。

      javascript
      // ageが30より大きいすべてのドキュメントにstatus:"senior"を追加
      db.users.updateMany(
      { age: { $gt: 30 } },
      { $set: { status: "senior" } }
      )

      * 単一ドキュメントの置換: replaceOne(<filter>, <replacement>, <options>) – 条件に一致する最初のドキュメント全体を指定したドキュメントで置き換えます(_idフィールドは保持されます)。

      javascript
      // nameが"Bob"のドキュメントを完全に置き換える
      db.users.replaceOne(
      { name: "Bob" },
      { name: "Robert", profession: "Engineer" }
      )

      * Delete (削除): 既存のドキュメントを削除します。

    • 単一ドキュメントの削除: deleteOne(<filter>) – 条件に一致する最初のドキュメントを削除します。

      javascript
      db.users.deleteOne({ name: "Robert" })

      * 複数ドキュメントの削除: deleteMany(<filter>) – 条件に一致するすべてのドキュメントを削除します。

      “`javascript
      // ageが20未満のすべてのドキュメントを削除
      db.users.deleteMany({ age: { $lt: 20 } })

      // コレクション内のすべてのドキュメントを削除 (filter {})
      db.users.deleteMany({})
      “`

シェルからの終了

シェルの操作を終えるには、以下のコマンドを入力します。

“`javascript
exit

または

quit()
“`

6.3. その他便利なシェル機能

  • JavaScriptの実行: シェルはJavaScriptエンジン上で動作するため、JavaScriptコードを実行できます。変数を使ったり、簡単なスクリプトを書いたりすることが可能です。
  • ヘルプの表示: 各オブジェクト(db, db.collection_nameなど)に対してhelp()メソッドを実行すると、利用可能なメソッドの一覧が表示されます。

    javascript
    db.help()
    db.users.help()

    * スクリプトファイルの実行: --fileオプションを使って、JavaScriptファイルに記述したシェルコマンドを実行できます。

    bash
    mongosh --file /path/to/your_script.js

MongoDBシェルは強力なツールであり、MongoDBを深く理解するためにはその使い方を習得することが非常に重要です。まずは基本的なCRUD操作から始めて、慣れてきたらより複雑なクエリや集計処理(Aggregation Framework)なども試してみましょう。

7. MongoDB Compassの利用

MongoDB Compassは、MongoDBを操作するための公式のGUIツールです。データベース、コレクション、ドキュメントの表示や編集、スキーマ分析、パフォーマンス分析など、様々な機能をグラフィカルに行うことができます。コマンド操作に不慣れな初心者の方でも直感的にMongoDBを操作できるため、非常に役立ちます。

Windows版のMongoDBインストーラーでは、デフォルトでCompassのインストールも含まれています。macOSやLinuxでは、別途公式サイトからダウンロードしてインストールする必要があります。

ダウンロードページ: https://www.mongodb.com/try/download/compass

7.1. 接続方法

MongoDB Compassを起動すると、通常最初に接続画面が表示されます。

  • デフォルト設定での接続: ローカルホストでデフォルトポート(27017)でMongoDBサーバーが起動している場合、接続文字列は mongodb://localhost:27017/ となります。「Fill in connection fields individually」を選択し、Hostnameにlocalhost、Portに27017を入力するか、「New Connection」画面で「Connect」ボタンをクリックするだけで接続できる場合が多いです。
  • カスタム設定での接続: 別のホスト、ポート、または認証が必要な場合は、適切な接続文字列を入力するか、各フィールドに情報を入力して接続します。

接続に成功すると、サーバーの情報やデータベース一覧が表示される画面になります。

7.2. GUIでの操作

Compassのインターフェースを使って、データベースやコレクション、ドキュメントを簡単に操作できます。

  • データベースの表示: 左側のナビゲーションパネルにデータベース一覧が表示されます。クリックすると、そのデータベースに含まれるコレクションが表示されます。
  • コレクションの表示: コレクション名をクリックすると、そのコレクションに含まれるドキュメント一覧が表示されます。
  • ドキュメントの表示と編集: ドキュメント一覧でドキュメントを選択すると、詳細が表示されます。ドキュメントの各フィールドはインラインで編集でき、ドキュメント全体をJSON形式で表示・編集することも可能です。
  • ドキュメントの挿入: 「ADD DATA」ボタンから「Insert Document」を選択し、新しいドキュメントをJSON形式で入力して挿入できます。
  • ドキュメントの検索: ドキュメント一覧の上部にクエリバーがあり、ここにJSON形式で検索条件(find()メソッドの第一引数と同じ形式)を入力して検索できます。例えば、{ age: { $gt: 30 } } と入力して「Find」をクリックすると、ageが30より大きいドキュメントのみが表示されます。ソートやプロジェクション(表示するフィールドの選択)もGUIで行えます。
  • ドキュメントの削除: ドキュメント詳細表示や一覧から、削除ボタンをクリックしてドキュメントを削除できます。
  • コレクションの作成/削除: データベースを選択した状態で、「CREATE COLLECTION」ボタンをクリックして新しいコレクションを作成したり、コレクション名の横にあるドロップダウンメニューから「Drop Collection」を選択してコレクションを削除したりできます。
  • データベースの削除: データベース名の横にあるドロップダウンメニューから「Drop Database」を選択してデータベースを削除できます。

7.3. その他の機能

Compassには、基本的なCRUD操作以外にも便利な機能があります。

  • Schema: コレクション内のドキュメントのスキーマ(フィールド名、データ型、出現頻度など)を分析・表示できます。これにより、コレクション内のデータ構造を視覚的に把握できます。
  • Explain Plan: クエリの実行計画を表示し、クエリのパフォーマンスを分析できます。どのインデックスが使われたかなどを確認し、パフォーマンス改善に役立てることができます。
  • Performance: サーバーの現在の操作状況や過去のパフォーマンスデータを確認できます。
  • Aggregations: Aggregation Frameworkのパイプラインを視覚的に構築・実行できます。

MongoDB Compassは、特に学習初期段階において、コマンド操作の理解を助け、MongoDBのデータ構造や操作を直感的に把握するのに非常に役立ちます。ぜひ活用してみてください。

8. 基本的な概念の理解

MongoDBを効果的に使うためには、いくつかの基本的な概念を理解しておく必要があります。RDBMSの経験がある方にとっては、その概念との対比で理解すると分かりやすいでしょう。

  • ドキュメント (Document):
    • MongoDBにおける基本的なデータの単位です。
    • JSONライクな構造(BSON形式)をしており、キーと値のペアの集まりです。値は、文字列、数値、ブーリアン、配列、ネストされたドキュメントなど、様々なデータ型を取ることができます。
    • RDBMSの「行(レコード)」に相当しますが、より複雑で自己記述的な構造を持つことができます。
    • すべてのドキュメントは、一意な_idフィールドを持ちます。これは挿入時に自動的に生成されるか、手動で指定できます。_idはデフォルトでインデックスが作成され、プライマリキーのような役割を果たします。
  • コレクション (Collection):
    • 複数のドキュメントをまとめたグループです。
    • RDBMSの「テーブル」に相当しますが、コレクション内のドキュメントは厳密に同じスキーマ(構造)を持つ必要がありません(スキーマレス/フレキシブルスキーマ)。これにより、データ構造の変更が容易になります。
    • 同じ種類のデータをまとめるために使用されます。
  • データベース (Database):
    • 複数のコレクションをまとめたコンテナです。
    • RDBMSの「データベース」に相当します。
    • 独立した名前空間を持ち、ユーザー管理、認証、アクセス制御などのスコープとなります。
    • 複数のデータベースを一つのMongoDBインスタンス上で管理できます。
  • 埋め込みドキュメントと参照 (Embedded Documents and References):
    • MongoDBでリレーションシップを表現する方法です。
    • 埋め込みドキュメント: あるドキュメントの中に別のドキュメントをネストさせる方法です。例えば、ユーザーの中に住所や電話番号を埋め込みます。これにより、関連データへのアクセスが高速になりますが、埋め込みすぎるとドキュメントが大きくなりすぎたり、データの重複が発生したりする可能性があります。
    • 参照: RDBMSの外部キーに似た考え方で、あるドキュメントから別のコレクションにあるドキュメントの_idを参照として持つ方法です。RDBMSの正規化に近い形式でデータを保持できます。関連データへのアクセスには追加のクエリが必要になります。
    • どちらの手法を選択するかは、アプリケーションのアクセスパターンやデータの特性によって異なります。MongoDBでは、読み込みパフォーマンスを重視する場合に埋め込みが、データの重複を避けたり複雑な多対多の関係を表現する場合に参照が選ばれることが多いです。
  • スキーマレスであることの意味:
    • 「スキーマレス」とは言われますが、これは「スキーマが全く存在しない」という意味ではなく、「データベース側でスキーマの厳密な定義や制約を強制しない」という意味合いが強いです。コレクション内のドキュメントは、互いに異なるフィールドを持っていたり、同じフィールドでも異なるデータ型を持っていたりすることが可能です。
    • 利点: 開発の柔軟性が高く、要件変更に迅速に対応できます。データ構造が流動的な初期開発や、多様な構造のデータを扱う場合に特に有効です。
    • 注意点: アプリケーション側でデータの構造をある程度管理する必要があります。予期しないデータ構造のドキュメントが挿入されないように、アプリケーションコードでバリデーションを行うなどの対策が必要になる場合があります。また、クエリや集計処理を行う際に、存在しないフィールドや予期しないデータ型に注意する必要があります。

これらの概念を理解することで、MongoDBのドキュメントモデリング(データ構造の設計)を適切に行い、MongoDBのパフォーマンスと柔軟性を最大限に引き出すことができるようになります。

9. MongoDBの構成設定

MongoDBサーバーの動作は、設定ファイルやコマンドラインオプションでカスタマイズできます。デフォルト設定で動作を開始できますが、ポート番号を変更したり、データディレクトリやログディレクトリの場所を指定したりするなど、環境に合わせて設定を変更する必要が出てくる場合があります。

9.1. 設定ファイルの場所

サービスとしてMongoDBをインストールした場合、通常は設定ファイルが自動的に作成されます。

  • Windows: デフォルトではインストールディレクトリのbinフォルダまたはServer\<version>フォルダにmongod.cfg または mongod.conf という名前で配置されます。
    例: C:\Program Files\MongoDB\Server\<version>\mongod.cfg
  • macOS (Homebrew): デフォルトでは/usr/local/etc/mongod.confまたは/opt/homebrew/etc/mongod.confに配置されます。
  • Linux (apt/yum/dnf): デフォルトでは/etc/mongod.confに配置されます。

設定ファイルはYAML形式で記述されます。

9.2. 主な設定項目

設定ファイルでよく変更される主な項目をいくつか紹介します。

“`yaml

例:/etc/mongod.conf (Linux)

systemLog 設定

systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log # ログファイルのパス

storage 設定

storage:
dbPath: /var/lib/mongodb # データディレクトリのパス
journal:
enabled: true

wiredTiger: # WiredTigerストレージエンジンの設定

engineConfig:

cacheSizeGB: 1 # 使用するキャッシュメモリ量 (GB)

processManagement 設定

processManagement:
fork: true # バックグラウンドで実行するかどうか (手動起動時によく使う)
pidFilePath: /var/run/mongodb/mongod.pid # PIDファイルのパス

network 接続設定

net:
port: 27017 # MongoDBが待機するポート番号
bindIp: 127.0.0.1 # 接続を許可するIPアドレス (複数指定可、カンマ区切り)
# 0.0.0.0 を指定するとすべてのIPアドレスからの接続を許可 (セキュリティに注意!)

security 設定 (認証を有効にする場合など)

security:

authorization: enabled

operationProfiling (クエリプロファイリング設定)

operationProfiling:

mode: slowOp

slowOpThresholdMs: 100

“`

  • systemLog.path: ログファイルのパスを指定します。
  • storage.dbPath: データベースファイル(データ)が保存されるディレクトリを指定します。これは非常に重要な設定です。
  • net.port: MongoDBサーバーがクライアントからの接続を待機するポート番号を指定します。デフォルトは27017です。
  • net.bindIp: サーバーが接続を受け付けるIPアドレスを指定します。デフォルトは127.0.0.1(ローカルホストのみ)です。外部からの接続を許可する場合は、サーバーのIPアドレスや0.0.0.0を指定しますが、その際はセキュリティ対策(認証やファイアウォール)を必ず行ってください。
  • security.authorization: 認証を有効にするかどうかを設定します。本番環境では必ず有効にすることを強く推奨します。

設定ファイルを変更した場合は、MongoDBサービスを再起動する必要があります。

  • Windows: 「サービス」アプリからMongoDBサービスを再起動
  • macOS (Homebrew): brew services restart mongodb-community@<version>
  • Linux (systemd): sudo systemctl restart mongod

手動でmongodコマンドを実行して起動する場合、--config <設定ファイルへのパス> オプションを使用すると、指定した設定ファイルの内容を読み込んで起動できます。

bash
mongod --config /etc/mongod.conf

10. よくある問題とトラブルシューティング

MongoDBのインストールや起動、接続時に遭遇しやすい一般的な問題とその解決策をいくつか紹介します。

10.1. mongod が起動しない

  • ポートが既に使用されている: デフォルトポートの27017が、他のアプリケーションや以前に起動したMongoDBプロセスによって使用されている可能性があります。
    • 解決策:
      • ポートを使用しているプロセスを特定し、終了させる。
        • Windows (コマンドプロンプト/PowerShell): netstat -ano | findstr :27017 でPIDを特定し、taskkill /PID <PID> /F で終了。
        • macOS/Linux (ターミナル): lsof -i :27017 または netstat -tulnp | grep 27017 でPIDを特定し、kill <PID> で終了。
      • MongoDBの設定ファイルでポート番号を変更する (net.port)。
  • データディレクトリが存在しない、または権限がない: storage.dbPathで指定したデータディレクトリが存在しないか、MongoDBを実行するユーザーがそのディレクトリへの書き込み権限を持っていない可能性があります。
    • 解決策:
      • 指定したデータディレクトリが存在するか確認し、必要であれば作成する。
      • MongoDBサービスを実行するユーザー(Linuxのmongodbユーザーなど)が、データディレクトリとその親ディレクトリに対して適切な権限(読み取り、書き込み、実行)を持っているか確認し、必要であればchownchmodコマンドで変更する。
  • 設定ファイルにエラーがある: mongod.confなどの設定ファイルに構文エラーがある可能性があります。
    • 解決策: 設定ファイルを開き、YAML形式の構文が正しいか確認する。特にインデントやコロン、スペースなどに注意する。コマンドラインから --config <path> オプションを付けて手動で起動してみると、エラーメッセージが表示される場合があります。
  • ストレージエンジンの問題: 以前のバージョンのMongoDBデータファイル(MMAPv1)を、新しいバージョンのMongoDB(WiredTigerのみをサポート)で起動しようとしている場合など。
    • 解決策: 互換性のないデータファイルを使用している場合は、データディレクトリを空にするか、以前のバージョンに戻す必要があります。新しいバージョンでは通常、空のデータディレクトリから開始する必要があります。
  • ログファイルを確認する: MongoDBのログファイル(設定ファイルのsystemLog.pathで指定されたパス)に、起動できなかった原因を示す詳細なエラーメッセージが出力されていることが多いです。
    • 解決策: ログファイルの内容を確認し、出力されているエラーメッセージや警告メッセージに基づいて原因を特定します。

10.2. mongosh (または mongo) が接続できない

  • MongoDBサーバー (mongod) が起動していない: クライアント(シェルやCompass)が接続しようとしても、サーバープロセスが実行されていない場合は接続できません。
    • 解決策: 前述の手順に従って、MongoDBサーバーが起動しているか確認し、起動していなければ起動します。
  • ホスト名またはポート番号が間違っている: クライアントが接続しようとしているホスト名(IPアドレス)やポート番号が、サーバーが待機しているものと異なっている可能性があります。
    • 解決策: サーバー側の設定ファイル(mongod.conf)でnet.bindIpnet.portを確認し、クライアント側で指定する接続情報(mongosh --host <hostname> --port <port> など)が一致しているか確認します。デフォルト以外で起動している場合は、特にポート番号に注意が必要です。
  • ファイアウォールによって通信がブロックされている: サーバー側またはクライアント側でファイアウォールが有効になっており、MongoDBが使用するポート(デフォルト27017)での通信がブロックされている可能性があります。
    • 解決策: サーバーおよびクライアントのファイアウォール設定を確認し、必要に応じてMongoDBのポートを開放します。
  • 認証が有効になっている: MongoDBサーバーで認証が有効になっている(security.authorization: enabled)にも関わらず、ユーザー名とパスワードを指定せずに接続しようとしている可能性があります。
    • 解決策: 認証を有効にしている場合は、ユーザー名とパスワードを指定して接続する必要があります(例: mongosh --username <user> --password <pass> --authenticationDatabase <authDB>)。学習段階で認証が不要であれば、設定ファイルで無効化するか、認証なしで起動しているか確認します。

10.3. 環境変数PATHの設定ミス

コマンドプロンプトやターミナルでmongodmongoshと入力しても「コマンドが見つかりません」といったエラーが表示される場合、MongoDBのbinディレクトリが環境変数PATHに追加されていないか、設定が正しく反映されていない可能性があります。

  • 解決策:
    • 環境変数PATHにMongoDBのbinディレクトリのパスが正しく追加されているか確認します。
    • 環境変数を変更した場合は、新しいコマンドプロンプト/ターミナルウィンドウを開き直して設定を反映させます。
    • PATHを設定しない場合は、コマンドを実行する際にMongoDBのbinディレクトリにある実行ファイルへのフルパスを指定する必要があります。

これらのトラブルシューティングのヒントは、問題を解決するための出発点となります。最も重要なのは、エラーメッセージをよく読み、ログファイルを確認することです。

11. 次のステップ

MongoDBのインストールと基本的な操作を習得した後は、さらにMongoDBの強力な機能を学び、実践的なアプリケーション開発に活用していくことができます。

  • 公式ドキュメントの活用: MongoDBの公式ドキュメントは非常に詳細で質が高いです。基本的な概念から高度な機能まで網羅されています。何か疑問に思ったり、特定の機能について知りたい場合は、まず公式ドキュメントを参照しましょう。
  • 認証とセキュリティ設定: 本番環境でMongoDBを使用する場合、認証とアクセス制御の設定は必須です。ユーザーを作成し、ロールに基づいて権限を付与する方法を学びましょう。mongod.confsecurity.authorization: enabledを設定し、adminデータベースでユーザー管理を行います。
  • インデックスの作成: クエリのパフォーマンスを向上させるために、インデックスは非常に重要です。どのフィールドにインデックスを作成すべきか、様々なインデックスタイプ(シングルフィールド、コンパウンド、マルチキー、テキスト、地理空間など)について学び、createIndex()メソッドを使ってインデックスを作成してみましょう。
  • Aggregation Framework: MongoDBのAggregation Frameworkは、データの集計や変換を行うための強力な機能です。RDBMSのGROUP BYやJOIN、サブクエリなどに相当する処理を、パイプライン形式で行えます。複雑なレポート作成やデータ分析に不可欠な機能です。
  • レプリケーションとシャーディング: 高可用性やスケーラビリティが求められるシステムでは、レプリケーションセット(データの冗長化)やシャーディング(データの水平分散)の構成について学ぶ必要があります。
  • 各種プログラミング言語からの接続: 開発しているアプリケーションからMongoDBを利用するためには、各言語用のMongoDBドライバーを使用します。Node.js, Python, Java, PHP, Ruby, C#, Goなど、多くの言語に対応した公式・非公式のドライバーが提供されています。
  • MongoDB Atlas (クラウドサービス) の検討: MongoDB Atlasは、MongoDBが提供するフルマネージドのクラウドデータベースサービスです。インフラ管理やバックアップ、スケーリングなどをMongoDB側が行ってくれるため、運用の手間を大幅に削減できます。無償枠(M0クラスター)も提供されているため、気軽に試してみるのも良いでしょう。

MongoDBは非常に多機能で進化し続けているデータベースです。これらの次のステップに進むことで、より複雑なアプリケーションや大規模なデータ処理にも対応できるようになるでしょう。

12. まとめ

この記事では、MongoDBとは何かという基本的な説明から始め、Windows、macOS、Linuxといった主要なOS環境へのMongoDB Community Editionのインストール手順を、それぞれ詳細に解説しました。

インストール後は、MongoDBサーバーの起動・停止方法、そしてMongoDBシェル(mongoshまたはmongo)を使った基本的なデータベース、コレクション、ドキュメントの操作(CRUD)方法を具体的に学びました。さらに、GUIツールであるMongoDB Compassの便利な機能についても紹介しました。

MongoDBのドキュメント、コレクション、データベースといった基本的な概念、そして柔軟なスキーマ(スキーマレス)であることの意味についても触れました。最後に、インストールや起動時によく遭遇する問題のトラブルシューティング方法と、MongoDBをさらに深く学ぶための次のステップへのヒントを示しました。

MongoDBの学習は、これらの基本的なステップから始まります。今回インストールしたMongoDB環境を使って、実際に手を動かしながら様々なコマンドや操作を試してみてください。柔軟なデータ構造、高いスケーラビリティ、開発の容易さといったMongoDBのメリットを、ぜひ体感してください。

この記事が、あなたのMongoDB学習の最初の一歩として役立つことを願っています。頑張ってください!


コメントする

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

上部へスクロール