【MongoDB】初めてでも分かる!MongoDB入門(後編)

MongoDB入門(後編)

 

こんにちは。八木澤です。

 

前回の前編ではMongoDBの概要について触れました。

【MongoDB】初めてでも分かる!MongoDB入門(前編)

 

今回の後編では実際にMongoDBを触りながら理解を深めていきたいと思います。

mango

 

1 MongoDBのインストール

1.1 MongoDBのバイナリダウンロード

 

http://www.mongodb.org/downloads

それぞれのプラットフォームに合ったものをダウンロードしてください。

 

1.2 ダウンロードしたファイルの展開

 

ダウンロードしたファイルはzipやtar.gz等に圧縮されているので,好きなディレクトリに展開してください。

展開したMongoDBのディレクトリは以下のようになっています。

(展開したディレクトリ)

|–bin

|    |–mongod.exe  : MongoDBの本体です。

|    |–mongo.exe   : MongoDBのクライアントです。

|    ..

|–GNU-AGPL-3.0

|–README

..


1.3 データディレクトリ作成

 

データの格納に使うディレクトリを作成します。コマンドプロンプト(Linuxならターミナル)を起動し,以下の通りディレクトリ作成してください。

【Windowsの場合】

> mkdir C:\data\db

【Linux(Mac)の場合】

> mkdir -p /data/db

 

1.4 MongoDBの起動

 

展開したMongoDBのディレクトリにあるMongoDBの本体「mongod.exe」を実行してください。

【Windowsの場合】

> cd (展開したディレクトリ)

> bin\mongod.exe

【Linux(Mac)の場合】

> cd (展開したディレクトリ)

> ./bin/mongod

 

起動したコンソールの最後に「waiting for connections on port 27017」と出力されれば起動成功です。


2 MongoDBを使ってみよう

2.1 MongoDBクライアントでMongoDBのコンソールに接続する

 

新しくコマンドプロンプト(Linuxならターミナル)を起動し,展開したMongoDBのディレクトリにあるMongoDBクライアント「mongo.exe」を起動してください。

【Windowsの場合】

> cd (展開したディレクトリ)

> bin\mongo.exe

【Linux(Mac)の場合】

> cd (展開したディレクトリ)

> ./bin/mongo

 

以下のように入力待ちの状態になれば接続できています。

> MongoDB shell version: x.x.x

> connecting to: test

>


2.2 Mongoクエリを使ってみよう

 

MongoDBはリレーショナルデータベース(以下”RDB”と略記)ではないため,SQLは使用できません。その代わり,MongoDB特有の「Mongoクエリ言語」を用います。

※Mongoクエリ言語のCRUD操作については公式ドキュメントに詳しい解説があります。

http://docs.mongodb.org/manual/crud/#crud-operations

 

以下の順に確認していきます。

(1) データベース操作

(2) コレクション操作

(3) ドキュメント操作(挿入)

(4) ドキュメント操作(選択)

(5) ドキュメント操作(更新)

(6) ドキュメント操作(削除)


(1) データベース操作

No 処理 MySQL MongoDB
 1 データベース作成 create database testdb; use testdb
 2 データベース名参照 show databases; show dbs
 3 データベース削除 drop database testdb; > use testdb
> db.dropDatabase()

 

(2) コレクション操作

No 処理 MySQL MongoDB
 1 コレクション(テーブル)作成 > create table products (…); 自動生成 または
> db.createCollection(“testcoll”)
 2 コレクション(テーブル)変更 > alter table testcoll add …; 自動生成
 3 コレクション(テーブル)名参照 show tables; show collections
 4 コレクション(テーブル)データ削除 truncate table testcoll; > db.testcoll.remove({})
 5 コレクション(テーブル)削除 drop table testcoll; > db.testcoll.drop()

※dropとremoveの違い

removeはコレクションが残ります。dropはコレクションごと削除します。


(3) ドキュメント操作(挿入)

No 処理 MySQL MongoDB
 1 挿入 insert into testcoll values(‘A’,”camera case”,5); > db.testcoll.insert({ category : ‘A’ , name : “camera case” , stock : 5 })

 

(4) ドキュメント操作(選択)

No 処理 MySQL MongoDB
 1 データ取得 select * from testcoll; > db.testcoll.find()
 2 > select name from testcoll where category = ‘A’ and stock <= 10 order by name; > db.testcoll.find({ category : ‘A’ , stock : { $lte : 10 } }, { name : 1 }).sort({ name : 1 })※$lte:less than equal
 3 > select *from testcoll where name != “camera case”; > db.testcoll.find({ name : { $ne : ” camera case” }})
 4 > select *from testcoll where category in (‘A’, ’C’); > db.testcoll.find({ category : {$in:[“A”, “C”]}})
 5 > select distinct namefrom testcoll; > db.testcoll.distinct(“name”)
 6 データ件数取得 > select count(*) from testcoll; > db.testcoll.count()
 7 > select count(*) from testcoll where name like “%camera%” or category = ‘C’; > db.testcoll.find({ $or : [{ name : /camera/ },{ category : ‘C’ }] }).count()
 8 > select count(stock) from testcoll; > db.testcoll.find({ stock : { $exists : true } }).count()
 9 行数を指定してデータ取得 > select * from testcoll limit 1; > db.testcoll.findOne() /db.testcoll.find().limit(1)
 10 > select * from testcoll limit 5; > db.testcoll.find().limit(5)

 


(5) ドキュメント操作(更新)

No 処理 MySQL MongoDB
 1 更新 update testcoll set stock=10 where category=’A’; > db.testcoll.update({ category : ‘A’ },{ $set : { stock : 10 } }, false, true)
 2 > update testcoll set stock=stock+10 where category=’A’; > db.testcoll.update({ category : ‘A’ },{ $inc : { stock : 10 } }, false, true)

updateの引数

update(condition, operation, upsert, multi)

upsert:trueのとき,conditionに一致するデータが無い場合は,新たにデータが登録されます。
multi :trueのとき,conditionに一致したすべてのデータを書き換えます。

 

(6) ドキュメント操作(削除)

No 処理 MySQL MongoDB
 1 削除 delete from testcoll where name=”camera case”; > db.testcoll.remove({ name : “camera case” })

 


2.3 Mongoクエリ言語の特徴

 

Mongoクエリ言語には以下の特徴があります。

(1) コレクションの各メソッドを用いてCRUD操作をします

たとえば,データを挿入する場合は,コレクション「testcoll」のメソッドinsertを呼び出します。

> db.testcoll.insert( { “name” : “mongo” } )

更新,参照,削除といったデータ操作も,すべてコレクションのメソッドを用います。

 

(2) メソッドの引数にはJSON形式のデータを渡します

データを挿入する場合には,insertの引数にJSONのデータを渡します。

> db.testcoll.insert( { “string” : “hoge” , “array” : [ “sun”, “mon”, “tue” ] } )

参照する場合は,絞込みの条件をJSON形式で指定します。

> db.testcoll.find()

> db.testcoll.find({ “string” : “hoge” })

 

(3) 変数が使えます

MongoDBのシェルではJavaScriptの文法で,変数が使えます。そのため,挿入するデータや検索条件をあらかじめ変数で定義しておき,メソッドに渡すことができます。

> data = { “string” : “fuga” , “array” : [ “jan”, “feb”, “mar” ] }

> db.testcoll.insert( data )

 

> condition = ({ “string” : “fuga” })

> db.testcoll.find( condition )

 

(4) 制御構造が使えます

MongoDBのシェルではJavaScriptの制御構造が使えます。たとえば,以下のようにforループでデータを挿入できます。

> for (var i = 1; i <= 5; i++) db.testcoll.insert( { x : 4 , j : i } )


(5) カーソルが使えます

検索結果に対するカーソルを定義して,while等の制御構造でアクセスできます。

> var c = db.testcoll.find()

> while ( c.hasNext() ) printjson( c.next() )

 

(6) ドキュメントの要素に簡単にアクセスができます

たとえば以下のようなドキュメントを挿入したとします。

> db.testcoll.insert( { “key1” : “hello” , “array1” : [ “sun”, “mon”, “tue” ] } )

すると,そのドキュメントに対して,JavaScriptの文法を用いて,以下のように簡単にアクセスできます。

> var doc = db.testcoll.find()

> printjson(doc[8][“key1”])

> printjson(doc[8][“array1”][2])

 

いかがでしたでしょうか?

JavaScriptに馴染みのある方であれば比較的すんなりと受け入れて頂けたのではないでしょうか?

 

最後まで読んで頂きありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。