読者です 読者をやめる 読者になる 読者になる

Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

MongoDBの基礎入門 - インストール から CRUDまで

MongoDB DB

NoSQLのMongoDBのインストールからCRUD(データの作成、検索、更新、削除)までの簡単な使い方について説明します。

目次

・MongoDBとは
・MongoDBの基本用語
・インストール方法
・MongoDBの起動、コンソールからの接続方法と使い方
・MongoDBのCRUD(作成、検索、更新、削除)

MongoDBとは

f:id:nipe880324:20140726084215j:plain

widipediaから引用

MongoDBはRDBMSではなく、いわゆるNoSQLと呼ばれるデータベースに分類されるものである。
RDBMSのようにレコードをテーブルに格納するのではなく、「ドキュメント」と呼ばれる構造的データをJSONライクな形式で表現し、そのドキュメントの集合を「コレクション」として管理する(このデータの物理的な格納はBSONと呼ばれるJSONのバイナリ版といえる形式で行われる)。
コレクションはRDBMSのような固定的なスキーマを持たない。ドキュメントには複雑な階層構造を持たせることもでき、それらの構造に含まれるフィールドを指定したクエリやインデクス生成も簡単な指定によって行える。
RDBMSのように高度な結合操作を効率的に行うことはできないが、データの追加・更新・削除・クエリは高速に行うことができる。また、アプリケーションは自身の構造やデータ型に合った自然な形でデータを格納することができるため、扱うデータの特性によっては、RDBMSよりも容易かつ迅速に開発を行うことができる可能性がある。

基本用語

・MongoDBドキュメント

JSONライクなフィールドと値のセットが集まったたもの。「MongoDBドキュメント」や「ドキュメント」などと呼ばれます。
SQLでは「レコード」に対応します。次のような形式で保存、表示されます。

  {
    name: "太郎",                  // field: value
    age: 26,                       // field: value
    status: "A",                   // field: value
    groups: [ "news", "sports" ]   // field: value
  }
・コレクション

名前からも分かるように、上記のMongoDBドキュメントを複数格納しているものです。
SQLでは、「テーブル」に対応します。

・フィールド

SQLでいう「カラム」のことです。
フィールドを指定することにより、値を取得したりできます。


インストール方法

環境ごとに違うので、詳細は公式ドキュメントを参考にしてください。
MongoDBのインストール方法(公式ページ)


MongoDBの起動、コンソールからの接続方法と使い方

・MongoDBの起動

デフォルトでは、ポート番号は「27017」で起動します。
もし、ポート番号を指定したい場合は--port」引数を使ってください。

$ mongod
・mongodにコンソールから接続

上記のコマンドでMongoDBが起動していると思いますので、別のコンソールから下記のコマンドで接続しましょう。
デフォルトでは、ホスト名は「localhost」でポート番号は「27017」に接続します。
もし、上記でポート番号などを変えている場合は、「--host」や「--port」引数を使ってください。

$ mongo
・DBを選択する

mongoコマンドで接続直後は、「test」という名のDBに接続されています

> db                   // 現在のDBを確認する (ex: 接続直後は 「test」が表示されるはず)
> show dbs        // DBの一覧を表示
> use <DB名>    // <DB名>を使うことを指定(MongoDBはDBを作成することはなく、insertした時点で自動で作成されます)
> db  // => test_mongodb_development 現在のDBを確認する
・ヘルプの表示
> help
・MongoDBの使い方

操作を行うDBを選択
DBが存在しないが「mydb」を使うと選択できる。あとから、DBにデータを作成するときに自動でDBが作成されるので問題ない。

use mydb

MongoDBドキュメントを作成

> j = { name : "mongo" }    // j というドキュメントを作成
> k = { x : 3 }                    // k というドキュメントを作成

testDataコレクションにjとkを挿入
testDataというコレクションを作成していないが、MongoDBが自動で作成してくれる。

> db.testData.insert( j )
> db.testData.insert( k )

現在のDBのコレクションを表示し、testDataコレクションが存在することを確認
system.indexesコレクションはすべてのDBが持っているコレクションです。

> show collections 
system.indexes
testData

findでドキュメントが存在することを確認する
全てのMongoDBドキュメントは "_id"フィールドを持っている。これはMongoDBドキュメント作成時に、MongoDBが自動で一意(ユニーク)な値を作成してくれている。

db.testData.find
{ "_id" : ObjectId("53d2d417ef8ccef0d315a9f3"), "name" : "mongo" }
{ "_id" : ObjectId("53d2d41fef8ccef0d315a9f4"), "x" : 3 }

これで基本的なMongoDBのコンソールからの操作が分かったと思いますので、作成、検索、更新、削除の仕方について学んでいきましょう。


MongoDBのCRUD(作成、検索、更新、削除)

※解説のために、複数行で記載していますが、もちろん1行で記載することも可能です。

・データの追加 - INSERT
db.users.insert(                     // コレクションを指定する(ex: usersコレクションにデータを追加する)
                  {                          // フィールドと値のセットをカンマ(,)区切りで渡す
                      name: "鈴木",
                       age: 26,
                    status: "B"
                  }
                )

SQL文だったら...

INSERT INTO users
            ( name, age, status )
VALUES      ( "鈴木", 26, "B" )
・データの取得 - FIND
db.users.find(                       // コレクションを指定する(ex: usersコレクションのデータを探す)
  { age: { $gt: 18 } },              // 検索条件を指定する(ex: ageが18より大きい値を取得。つまり、age > 18)
  { name: 1, age: 1 }       // 取得するフィールドを指定する(ex: nameとageを取得する。_idは必ず取得されてしまう)
).sort( { age: 1 } ).litmi(3)     // 検索結果に対する操作を指定する(ex:  sort: ageの昇順で並び替える(1:昇順 / -1:降順)。limit: それを3ドキュメントまで取得)

SQL文だったら...
>||
SELECT _id, name, age
FROM   users
WHERE  age > 18
ORDER BY age ASC
LIMIT  3

その他

db.users.find() // usersコレクション内の全てのドキュメントを取得
・データの更新 - UPDATE
db.users.update(           // コレクションを指定する
  { age: { $gt: 18 } },       // 検索条件を指定する
  { $set: { status: "A" } },    // 設定する値を指定する
  { multi: true }                // 検索オプション(multiオプションは検索条件にヒットする全てのドキュメントを更新する)
)

SQL文だったら...

UPDATE users
SET    status = "A"
WHERE  age > 18
・データの削除 - DELETE
db.users.remove(      // コレクションを指定する
  { status: "D" }          // 削除する条件を指定する(statusフィールドが"D"のドキュメントを削除する)
)

SQL文だったら...

DELETE FROM users
WHERE  status = "D"


以上です。