今回は、Node.jsで扱える代表的なデータベースの「MongoDB」について学習をしていきましょう!
また、最新のMongoDB Atlasのクラウドサービスを使い、ブラウザ上でデータベースを構築してNode.jsからCRUD操作する手法についても解説していきます!
「データを永続的に保存するにはどうすればいいのか」
「Node.jsでプログラミングできるデータベースを知りたい」
「MongoDBの使い方を学びたい」
このような疑問も含めて、本記事では以下のような内容で解説していきます!
【基礎】「MongoDB」の使い方
【実践】MongoDBのCRUD操作
この記事で、MongoDBをしっかり学習してスキルアップを目指していきましょう!
「MongoDB」とは?
まずは、基本的な知識から身につけていきましょう!
「MongoDB」は、一般的なMySQLとは対象的にNoSQLデータベースであり、ドキュメント指向でスケーラブルなデータ構築が可能になります。
このドキュメント指向というのは、MongoDBで扱うデータ構造がJSONフォーマットになっており、特にNode.jsのようなJavaScriptから非常に扱いやすいのが大きな魅力となります。
さらに、本記事でご紹介するMongoDB Atlasのクラウドサービスを利用することで、今すぐブラウザからデータベースを構築してWebアプリに組み込んでいくことが可能です。
Node.jsのデータベース構築にご興味ある方は、ぜひ参考にしてみてください!
「MongoDB」の使い方
この章では、基本的なMongoDBを使うまでの導入について見ていきましょう!
主に、MongoDB向けのパッケージインストールやクラウドサービスの導入、Node.jsからMongoDBと接続する方法について学んでいきます。
MongoDBの導入方法
まずは、Node.jsからMongoDBを扱えるようにするための手順から見ていきましょう!
具体的には、まず最初に以下のようにパッケージをインストールします。
$ npm install mongodb
そして、Node.jsから利用できるようにrequireを使います。
var MongoClient = require('mongodb').MongoClient;
これで、MongoDBをNode.jsから使えるようになります。
あとは、次の章で解説するようにMongoDBのデータベースを構築していきましょう!
MongoDBAtlasのユーザー登録方法
それでは、MongoDBのクラウドサービスを活用してデータベースを構築していきましょう!
まずは、MongoDB Atlasの無料ユーザー登録をすませておきます。
公式サイトにアクセスしたら、トップページの中央にあるボタンをクリックします。
そして、ユーザー登録のためにメールアドレスとパスワードを設定すればOKです。
次に、データベースで利用するサーバーの「リージョン」を選択します!
今回のように学習目的であれば、青色のハイライトで「free(無料)」と記載されたリージョンを選択すると良いでしょう。
クラスタについては「M0」の無料版を利用しましょう。
これで無料のMongoDBデータベースを構築することができます。
ダッシュボードが表示されるので、今度はデータベースを利用するユーザーの登録をしておきましょう。
メールアドレスとパスワードを設定することでNode.jsからこのデータベースを操作できるようになります。
最後にホワイトリストを設定しておきます。
これは、指定したIPアドレスからしかデータベースにアクセスできないようにしてくれる便利なセキュリティ機能です。
もし、IPアドレスが分からない場合は画面に表示されている「ADD CURRENT IP ADDRESS」のボタンをクリックすれば自動的に入力してくれます。
ここまで出来たら、試しにダッシュボードからデータベースを作成してみましょう!
今回は、「mydata」という名称のデータベースを作成して、その中に「users」という名称のコレクションを作成しています。
Node.jsからMongDBを接続する方法
次に、Node.jsから先ほど作成したデータベースと接続してみましょう!
接続に必要なのは専用のURIだけです。
これは以下のような組み合わせの文字列となります。
mongodb+srv://【ユーザー名:パスワード】@【クラスタ名】.mongodb.net/test
例えば、ユーザー名が「taro」でパスワードが「abcdef」、クラスタ名が「mycluster-ox8hu」であれば次のようなURIになります。
var uri = 'mongodb+srv://taro:abcdef@mycluster-ox8hu.mongodb.net/test';
あとは、これを「connect()」メソッドに当てはめていけばOK!
MongoClient.connect(uri, { useNewUrlParser: true }, function(err, client) { //ここに処理を記述する client.close(); });
connect()の引数に設定した関数内にCRUD操作など実行したい処理を記述していきます。
ちなみに、オプション設定として「userNewUrlParser: true」を記述しないとエラーが出る場合があるので注意しましょう。
MongoDBのCRUD操作
この章では、MogoDBデータベースをNode.jsから操作するための基本的な使い方について見ていきましょう!
主に、データベースへデータの挿入・取得・更新・削除について学んでいきます。
ドキュメントの挿入(追加)
MongoDBはドキュメント指向である点について冒頭でも紹介しましたが、このドキュメントを新しく作成してデータベースへ挿入(追加)する方法について見ていきましょう!
記述するプログラムは前章で解説したように「connect()」内に書くようにしてください。
まずは、データベースを以下のように取得しておきます。
var collection = client.db('mydata').collection('users');
この例では、ダッシュボードから作成した「mydata」という名称のデータベースにある「users」コレクションを取得しています。
このデータベースに例えば「太郎」という名前を挿入するには「insertOne()」メソッドを次のように使います。
collection.insertOne({ name: '太郎' });
これは1つだけのドキュメントを挿入する場合に使われるのですが、複数のドキュメントを同時に挿入したい場合は「insertMany()」を使います。
collection.insertMany([ {name: '花子'}, {name: '一郎'} ])
この例だと、「花子」「一郎」という2人分の名前をデータベースに挿入しているわけです。
ドキュメントの取得
次にデータベース内に格納されているドキュメントを取得する方法について見ていきましょう!
先ほど「insertOne() / insertMany()」を使って3人分の名前を追加したので、データベースにはいくつかドキュメントが格納されているはずです。
そこで、ドキュメントを取得するには「find()」を次のように使います。
collection.find().toArray(function(error, documents) { console.log(documents); });
実行結果
[ { _id: 5bde360483931801a88853b1, name: '太郎' }, { _id: 5bde360e37cc5c0260c61e8e, name: '花子' }, { _id: 5bde360e37cc5c0260c61e8f, name: '一郎' } ]
find()だけだとすべてのオブジェクトデータを取得するため、「toArray()」メソッドを使って格納されているドキュメントデータだけを取得するようにしています。
実行結果を見ると3人分のデータオブジェクトが配列形式で取得できているのが分かりますね。
あとは、例えば名前だけを取得したければ次のようにfor-of文などを使えば簡単に取得できます。
collection.find().toArray(function(error, documents) { for (var document of documents) { console.log(document.name); } });
実行結果
太郎 花子 一郎
ドキュメントの更新
保存されているドキュメントをアップデート(更新)して、別の情報に書き換える方法について見ていきましょう!
更新するには「updateOne()」メソッドを次のように記述します。
collection.updateOne( {name: '花子'}, {$set: {name: '花子さん'} } );
updateOne()の第1引数に上書きしたいドキュメントオブジェクトを指定し、第2引数へ上書きする情報をオブジェクトで設定します。
この時に「$set」の配下に上書きする情報を記述することに注意しておきましょう!
ちなみに、「updateMany()」を使えば複数のドキュメントを更新することも可能です。
ドキュメントの削除
今度はドキュメントを削除する方法について見ていきましょう!
利用するのは「deleteOne()」メソッドで、次のように簡単な記述で目的のドキュメントを削除することができます。
collection.deleteOne({name: '太郎'});
この例では、名前が「太郎」のドキュメントだけを削除するという意味になります。
もちろん「deleteMany()」メソッドを使えば複数のドキュメントを削除することもできます。
まとめ
今回は、Node.jsからMongoDBデータベースを操作するための基本的な使い方について学習をしました!
最後に、もう一度ポイントをおさらいしておきましょう!
・MongoDBはドキュメント指向のスケーラブルなデータベースである
・MongoDB Atlasのクラウドサービスを使うとブラウザ上だけでデータベースを構築できる
・Node.jsからMongoDBを操作するにはconnect()メソッド内に処理を記述する
上記内容を踏まえて、ぜひ自分でもプログラミングに取り入れて活用できるように頑張りましょう!