いまさら聞けないMongoDBの基礎知識とインストール、CRUD操作の基本、モデリングツールMongooseの使い方:MEANスタックで始めるWebアプリ開発入門(5)(2/3 ページ)
MEANスタックを用いたWebアプリの開発方法について紹介していく連載。今回は、ドキュメント指向データベース「MongoDB」の概要とセットアップの仕方、コマンドで基本的なCRUD操作をする方法、MongoDB用モデリングツール「Mongoose」の使い方と、Node.jsからMongooseモジュールでMongoDBを操作する方法などについて。
MongoDB shellを使ったCRUD操作の基本
MongoDB shellを使ってデータを更新していきましょう。
Create:useコマンドでMongoDBの作成
まずはDBの作成です。DBの切り替えや新規作成するには、useコマンドを使用します。
> use sample-mongo switched to db sample-mongo
この時点ではDBはまだ作成されません。次に、データを登録してみます。データ登録は、次の構文で行います。
db.<コレクション名>.insert({登録内容});
下記処理を実行すると、booksコレクションが作成されてドキュメントが登録されます。
> db.books.insert({_id:1,title:"MongoDBイン・アクション",price:100}) WriteResult({ "nInserted" : 1 })
> db.books.insert({_id:2,title:"JavaScriptリファレンス",price:300}) WriteResult({ "nInserted" : 1 })
Read:findコマンドでMongoDBのドキュメント読み取り
ドキュメントの取得にはfindを使用します。次のようにすれば、全てのbookドキュメントが取得されます。
> db.books.find()
また、findでは条件を指定してドキュメントを取得することもできます。
> db.books.find({title:'MongoDBイン・アクション'})
さらに、比較演算子を使用して条件を指定することもできます。比較演算子を使用した条件指定方法は次のようになります。※次の構文は、上の処理と同じ意味になる
> db.books.find({title:{$eq:'MongoDBイン・アクション'}})
よく使用される比較演算子
priceが150以上のドキュメントを抽出するには、$gte比較演算子を使用します。
> db.books.find({price:{$gte:150}}) { ・・ "_id" : 2, "title" : "JavaScriptリファレンス", "price" : 300 }
$gte以外にも、よく使用される比較演算子がいくつかあります。
== | $eq | 等しい |
---|---|---|
!= | $ne | 等しくない |
> | $gt | 右辺より大きい |
>= | $gte | 右辺以上 |
< | $lt | 右辺未満 |
<= | $lte | 右辺以下 |
比較演算子の詳細については下記リンクも参考にしてみてください。
Update:updateコマンドで更新処理
次は更新処理も行ってみましょう。更新はupdateで条件と更新内容を指定します。
db.<コレクション名>.update({条件}, {更新内容})
次のようにすれば、「_id=2」のタイトルを変更します。
> db.books.update({ _id:2 }, { $set : { title: "JavaScript本格入門" } })
update field operator
なお、updateの第3引数にtrueを渡すと、下記の場合にはinsert、そうでなければupdateという動作になります。
- コレクションが存在しない
- 該当するドキュメントがない
上のupdateで指定している「$set」とは、「update field operator」と呼ばれるものの一つで、存在するフィールドの値を設定します。$set以外にも、よく使用するupdate field operatorがあるので紹介します。
$inc | フィールドの値を、渡された数だけ増減させる |
---|---|
$rename | フィールド名を変更する |
$setOnInsert | update時に第3引数でtrueを指定して、処理がinsertで動作した場合に値を設定 |
$unset | フィールドを削除する |
$currentDate | 現在時刻を設定する |
update field operatorの詳細については下記リンクも参考にしてみてください。
Delete:removeコマンドでドキュメントの削除
ドキュメントの削除はremoveで行います。次の構文を使用すれば、条件に合うドキュメントを削除できます。
db.<コレクション名>.remove({条件})
では、「_id=2」のbookドキュメントを削除してみましょう。
> db.books.remove({ _id:2 })
Delete:dropコマンドでコレクションの削除
なお、コレクションを削除するには、dropを使用します。
> db.books.drop() true
exitコマンドでシェルを終了
一通り操作の確認ができたので、exitコマンドでシェルを終了させましょう。
> exit bye
ここまではMongo shellを使ってドキュメントの操作を行いました。次に、Node.jsからMongoDBにアクセスしてみましょう。
MongoDB用モデリングツール「Mongoose」
MongoDBにNode.jsからアクセスするモジュールは複数あります。標準では「node-mongodb-native」というモジュールを使用すればアクセス可能ですが、本記事では「Mongoose」というツールを使用します。
Mongooseとは、MongoDB用モデリングツールで、Node.jsの非同期環境でうまく動作することを目的として設計されています。Mongooseを使用すれば、モデルを定義して操作することで、MongoDBのコレクション/ドキュメントを操作できます。
Mongooseのインストールと環境設定
Mongooseの動作を試すための環境を作りましょう。適当な場所に「mongo-sample」ディレクトリを作り、そこでnpmを使用してMongooseモジュールをインストールします。
% mkdir mongo-sample && cd mongo-sample % npm install mongoose
Node.jsでMongooseを使う準備は、これだけでOKです。
次にMongoDBのデータベースを作成しましょう。Mongo shellで「book-store」という名前のデータベースを作成します。
% mongo //mongo shell起動 > use book-store switched to db book-store
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- MongoDBとRavenDBの違いから読み解く、ドキュメント・データベースごとの設計思想
MongoDBと同じ「ドキュメント・データベース」であるRavenDBの特徴を見てみよう。そこから設計思想の違いが見えてくる。 - ドキュメント指向のNoSQLデータベース(CouchDB、MongoDB)編
連載ではNoSQLを特性から分類して、主要プロダクトの特性を紹介してきました。今回は、利用者も多いドキュメント指向NoSQL2つを見ていきましょう。後半では連載全体の「まとめのまとめ」も。 - Node.js、MongoDBでデータの保存
Node.jsとSocket.IO、MongoDBを使用して、Webページの更新内容がリアルタイムにView画面に反映されるサイトを作ってみた - Meteorでチャットアプリを作ってしまったよ