いまさら聞けないMongoDBの基礎知識とインストール、CRUD操作の基本、モデリングツールMongooseの使い方MEANスタックで始めるWebアプリ開発入門(5)(2/3 ページ)

» 2015年07月14日 05時00分 公開
[中村修太クラスメソッド株式会社]

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以外にも、よく使用される比較演算子がいくつかあります。

表1 よく使用される比較演算子
== $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があるので紹介します。

表2 よく使用する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の公式サイト

 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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。