はじめましてMongoDB #1 MongoDBに触れてみよう
はじめに
2024年度がはじまりました。新しい環境に飛び込んだ方も多いかと思います。新社会人としてスタートされた皆さん、おめでとうございます。
そこで、今回は「はじめましてMongoDB」というタイトルで、最初の一歩を応援する記事にしてみました。「MongoDBとは?」の次の段階として、「MongoDBを触ってみたい」「MongoDBを扱うにはどうしたら良いか?」という内容になっています。
書いていたらすごく長くなってしまったため、何回かに分けてお送りします。
- はじめましてMongoDB #1 MongoDBに触れてみよう(本記事)
- はじめましてMongoDB #2 MongoDBを建ててみよう
- MongoDB Community Editionを使って、レプリカセットを建ててみます。
- はじめましてMongoDB #3 MongoDBを使ってみよう
- より本番環境に近いPoC環境を作るためのアイデアやドキュメントを紹介します。
業務でMongoDBのPoC環境を作ることになった方、個人的に気になるから触ってみたいという方、MongoDBを利用しているシステムの案件に参画することになり急きょ入門する必要が出てきた方などに刺さるように書いています。参考になれば幸いです。
MongoDBについて学ぶ ~MongoDB University~
ドキュメントDBやMongoDBの特長は、いろんなサイトを見てなんとなく分かったが、さらに知識を深めたいという方には、MongoDB公式のe-learningサービスであるMongoDB Universityがおすすめです。
サインアップすれば全ての講座を無料で受講できます。座学(動画)→クイズorハンズオンという流れなので、理解を確認しながら自分のペースで進めることが出来ます。
とりあえず「Introduction to MongoDB Course」から始めましょう。と言いつつ、全部やるとそれなりの量なので、もう本当に時間はかけられないと言う方は、7つ目の「MongoDB CRUD Operations:Modifying Query Results」までだけでもやっておくと良いです。
コンテンツは英語しかありませんが、Google Chromeなら拡張機能のGoogle 翻訳を使いながら進めることができますし、動画は字幕で日本語を表示することができます。
※実は2013年に当時弊社CSOの鈴木逸平が公式で日本語化したのですが、現在はもう公開されていないようです。ざんねん…。
公開当時の投稿:MongoDBの日本語プログラミング講座について:鈴木いっぺい の 北米IT事情
MongoDB Atlas or MongoDB Server
MongoDBには「MongoDB Atlas」と「MongoDB Server」という2つの利用形態があります。大雑把に言うと、クラウドサービスで利用したいか、自前で用意した環境でセルフホステッドで使用するかどうかです。
クラウドサービスで利用したい場合はMongoDB Atlasを選びます。こちらはMongoDB公式のクラウドサービスです。
実際は、Amazon Web Service、Azure、Google Cloud上でアプリケーションやフロントエンドを用意して、バックエンドのデータベースとしてMongoDBを使いたいというシーンが多いのではないでしょうか。そのような構成であれば、VPCによるピアリングか、プライベートエンドポイントで各クラウドサービスとAtlas上のMongoDB クラスタを接続することができます。
Set Up a Network Peering Connection — MongoDB Atlas
Configure Private Endpoints — MongoDB Atlas
Amazon Web Serviceには公式ドキュメントがありました。
有名なクラウドサービスでの利用となると、実はAmazon Web ServiceのAmazon DocumentDBやAzure Cosmos DB for MongoDBも選択肢に入りますが、これらについても言及すると執筆と検証量が増えてしまい(私が)大変なので、今回は触れません。
一方、セルフホステッドで使用したい場合はMongoDB Serverをダウンロードして、自身で構築していただくことになります。こちらはさらに「Community Editon」と「Enterprise Edition」の2つに分かれます。
PoCや検証用途で試す場合はCommunity Editionを選んでください。Enterprise Editionは、MongoDBから「Enterprise Advanced」のライセンスを購入すると使えます。弊社経由で購入していただく形となります。実は、MongoDBのダウンロードセンターからEnterprise Editionもダウンロード可能ですが、実際にダウンロードして導入するとライセンス違反となりますので、ご注意ください。
御託はこれぐらいにして、実際に触っていきましょう。
MongoDB AtlasでM0(完全無料クラスタ)をデプロイする
Atlasでは色々な機能やクラスタが選べますが、今回は一切お金のかからない手順でいきます。クレジットカード登録も必要ありません。
こちらのドキュメントの手順で進めていきます。
まずは以下のサイトからサインアップしてください。
https://www.mongodb.com/cloud/atlas/register
プライバシーポリシーに同意するか確認されます。
サインアップしたユーザの情報と、Atlasの利用目的について聞かれます。分かる範囲で正確に入力してください。
デプロイするクラスタを選択する画面になりました。後からでもできるので、いったんここは「I’ll do this later」にしておきます。
Atlasのホーム画面になりました。これがAtlasを使ううえで一番見る画面です。
M0のクラスタをデプロイしてみましょう。左のメニューから「Database」を選び、「Build a Database」を選びます。
先ほど見たのと同じ画面になりましたね。M0を選択します。書いてある通り、MongoDBの学習のために使える完全無料のクラスタです。他の項目はデフォルトのままでOKです。
接続を許可するIPアドレスと接続ユーザの作成
次に、クラスタに接続を許可するIPアドレスと、データベース接続時の認証(SCRAMと呼ばれる方式)で使用するユーザを追加します。
許可するIPアドレスは、今作業しているPCのIPアドレス(Atlasから見えるのはルータからインターネットに出た後のグローバルIPアドレスなので、PCのIPアドレスと必ず同じではありません)が検出され登録されます。後から手動で追加することも可能です。
こちらで追加するユーザは、データベース接続時に使用するものです。Atlasにサインアップしたユーザとは別に管理されます。パスワードはこの画面を閉じると一切見ることが出来ないので、メモしておいてくださいね。
「choose a connection method」を選んで次に進みます。
接続時のクライアントを選択する画面になりますが、こちらは次の章で解説していくので、一旦閉じても大丈夫です。
Cluster0がデプロイされました。これでAtlasにおけるMongoDBクラスタのデプロイは完了です。とても簡単でしたね。次の章でクライアントからクラスタに接続してみましょう。
MongoDB CompassからAtlas上のクラスタに接続する
MongoDBのクラスタに接続するためのクライアントはいくつかありますが、今回はMongoDB公式から提供されているCompassを使用します。無料で使えます。GUIのクライアントで、機能が豊富です。Windows 10などのGUIのPCならば、とりあえずこれを入れておけばOKです。ここからダウンロードしてください。
Compassの機能については、こちらの記事でも紹介しています。
接続文字列を取得する
さて、MongoDBクラスタに接続するには接続文字列が必要です。Atlasでは自動で接続文字列を発行してくれます。接続したいクラスター名の横にある「Connect」を選びます。
いくつか選択肢が出てきました。今回は「Compass」を選びます。
既にCompassのダウンロードが終わっているので「I have MongoDB Compass installed」を選びます。(ちなみに、I don't have ~を選ぶとCompassのダウンロードリンクが表示されるだけです)
2. Copy the connection string, then open MongoDB の下に書かれているのが接続文字列です。
mongodb+srv://[ユーザ名]:[パスワード]@[クラスタのFQDN]/ という構成になっています。
ここでいうユーザ名とパスワードは、クラスタデプロイ時に発行したものです。
「Review setup steps」をクリックすると、以下の画面に遷移します。
接続を許可するIPアドレスの追加と、データベースへの接続ユーザー(dbadmin)の作成はクラスターデプロイの時点で完了していますが、このメッセージダイアログ内の「IP Access List」「Database Users」から追加することもできます。(もちろん、Atlasのホームからも開けます)
Compassから接続する
Compassを起動して「New connection」を選びます。
URIのところに、先ほど取得した接続文字列を入力します。接続文字列内の<password>部分は、「接続を許可するIPアドレスと接続ユーザの作成」でコピーしたものに置き換えてください。
パスワードを忘れてしまった場合は、Atlasの「Database Access」から再発行できます。Actionsの「EDIT」を選択し「Edit Password」で新しいパスワードを打ち込むか、自動生成してください。
Compassでの操作説明に戻ります。Save&Connectをクリックします。接続の設定に名前を付けられるように促されます。
この画面になっていれば接続できています。左側に列挙されているのはクラスタ内にあるデータベースです。admin、config、localがシステムで利用するデータベースで、sample_mflixはサンプルのデータベースです。
データベース名をクリックすると、中のデータ(ドキュメント)を見ることができます。
これでMongoDBにアクセスする環境が整いました。
サンプルデータで遊んでみよう
MongoDB Atlasには標準でサンプルデータを入れる機能があります。既に「sample_mflix」が入っていますが、他のデータを入れることができます。方法は簡単です。Atlasのクラスタの「…」メニューから「Load Sample Dataset」をクリックするだけです。
少し時間がかかるので気長に待ちましょう。コーヒー1杯を飲むぐらいの時間がかかります。
クエリを投げてみよう
Compassからいくつかクエリを投げてみましょう。MongoDBはSQLではなく、MongoDBの独自のクエリです。
せっかくのGUIクライアントなのですが、個人的にはクエリはCLIから打つ方がやりやすいので、CLIでやります。画面下の「MONGOSH」をクリックすると、CLIベースのUIになるので、今回はこちらからやっていきましょう。
(´゚д゚`)< そんなこと言ったって、今日MongoDBを触ったばかりなのに、クエリなんか分からんぞ!
・・・おっと失礼!いくつかクエリの例を置いておきます。
1.最新の5つのドキュメントを取得する
どのデータベースでも実行可能です。「use データベース名(例:use sample_mflix)」で目的のデータベースに操作対象をスイッチしてから実行してください。
db.movies.find().limit(5)
以下のクエリはすべてsample_mflixにスイッチしてから実行してください。
2.年度が2000年以降の映画のタイトルと年度を取得する
db.movies.find({ "year": { $gte: 2000 } }, { "title": 1, "year": 1 }).limit(5)
3.ジャンルが"Action"である映画のタイトル、年度、ジャンルを取得する
db.movies.find({ "genres": "Action" }, { "title": 1, "year": 1, "genres": 1 }).limit(5)
4.出演者に"Tom Hanks"が含まれる映画のタイトル、年度、出演者を取得する
db.movies.find({ "cast": "Tom Hanks" }, { "title": 1, "year": 1, "cast": 1 }).limit(5)
5.IMDBの評価が8以上の映画のタイトル、年度、IMDBの評価を取得する
db.movies.find({ "imdb.rating": { $gte: 8 } }, { "title": 1, "year": 1, "imdb.rating": 1 }).limit(5)
こんな感じで、ヒットするドキュメントが表示されるはずです。
MongoDBのクエリについて詳しく知りたい人は、ドキュメントも参照してください。
https://www.mongodb.com/docs/manual/tutorial/query-documents/
まとめ
「触れてみよう」と言いながら結構なボリュームになってしまいました。実施してくださった皆さん、お疲れ様でした。次回は「はじめましてMongoDB #2 MongoDBを建ててみよう」です。
蛇足:アイキャッチ画像について
今回は新入社員のようなMongoDBちゃんを描いてみました。私自身も13年前はリクルートスーツを着て研修を受けていました。懐かしいですね。