MongoDB 入門ガイド
MongoDB はドキュメントデータベースであり、ローカル環境へのインストール、またはクラウド上でのホスティングが可能です。
1. SQL とドキュメントデータベースの比較
SQL データベースは「リレーショナルデータベース(関係データベース)」と呼ばれます。これらは関連するデータを個別の「テーブル」に保存します。データが必要なときは、複数のテーブルに対してクエリを実行し、データを「ジョイン(結合)」して元の形に戻します。
一方、MongoDB は「ドキュメントデータベース」であり、多くの場合「非リレーショナルデータベース」と呼ばれます。これはリレーショナルなデータをドキュメントデータベースに保存できないという意味ではありません。リレーショナルなデータの「保存方法が異なる」ということを意味します。より適切な呼び方は「非テーブル型(ノンタブラ)データベース」でしょう。
MongoDB はデータを「フレキシブルなドキュメント」として保存します。複数のテーブルに分ける代わりに、関連するすべてのデータを単一の場所にまとめて保持できます。これにより、データの読み取りが非常に高速になります。
もちろん、データのグループを複数持つことも可能です。MongoDB では、テーブルに相当するものは「コレクション」と呼ばれます。
2. ローカル vs クラウドデータベース
MongoDB はローカル環境にインストールでき、自身のハードウェア上で独自の MongoDB サーバーをホスティングできます。この場合、サーバーの管理、アップグレード、その他のメンテナンスをすべて自分で行う必要があります。
オープンソースの「MongoDB Community Server」をダウンロードして、自身のハードウェア上で無料で使用することが可能です。
しかし、本チュートリアルでは、クラウドデータベースプラットフォームである MongoDB Atlas を使用します。これは、独自のローカルデータベースをホスティングするよりもはるかに簡単です。
コード例を実際に試すには、MongoDB データベースへのアクセス権が必要です。まずは無料の MongoDB Atlas アカウントにサインアップして始めましょう。
3. クラスターの作成
アカウントを作成したら、無料の「Shared Cluster(共有クラスター)」をセットアップし、お好みのクラウドプロバイダーとリージョンを選択します。
デフォルトでは、MongoDB Atlas は完全にロックダウンされており、外部からのアクセスは一切許可されていません。
ユーザーをセットアップし、許可された IP アドレスのリストに自身の IP アドレスを追加する必要があります。
- 「Database Access」メニューから新しいユーザーを作成し、ユーザー名とパスワードを控えておきます。
- 次に「Network Access」メニューで、現在の IP アドレスを追加し、使用しているコンピュータからのアクセスを許可します。
4. MongoDB Shell (mongosh) のインストール
MongoDB データベースに接続する方法はたくさんあります。
ここではまず、MongoDB Shell である mongosh を使用することから始めましょう。
公式のインストール手順に従って、使用しているオペレーティングシステムに mongosh をインストールしてください。
正しくインストールされたか確認するには、ターミナルを開いて以下のコマンドを入力します。
# バージョンを確認する
mongosh --version最新バージョンがインストールされていることが確認できるはずです。
このチュートリアルで使用しているバージョンは v1.3.1 です。
5. データベースへの接続
データベースに接続するには、そのデータベース専用の「接続文字列(コネクションストリング)」が必要です。
- MongoDB Atlas のダッシュボードの「Databases」セクションで、作成したクラスターの「Connect」ボタンをクリックします。
- 次に「Connect with the MongoDB Shell」を選択します。
- 接続文字列をコピーします。
5.1 接続例
接続文字列は以下のようになります。
# ターミナルで実行する接続コマンドの例
mongosh "mongodb+srv://cluster0.ex4ht.mongodb.net/myFirstDatabase" --apiVersion 1 --username あなたのユーザー名コピーした接続文字列をターミナルに貼り付けて、Enter キーを押してください。
先ほど作成したデータベースユーザーのパスワード入力を求められます。
これで、データベースへの接続が完了しました!