LotosLabo

プログラミング技術とか気になった情報を載せていきます

MongoDBについて



MongoDBとは


RDBMSとは異なり、オープンソースドキュメント指向データベースと言われるものです。
また、NoSQLともいわれています。

特徴としては以下のものがアリアmス。


●特徴

スキーマレス
・高機能Index
・高速
・並列性
・耐障害性
・スケーラビリティ
トランザクションなし
・JOIN無し

DB tech showcaseより引用:


開発環境

こちらよりインストールできます。

https://www.mongodb.org/


インストールが終わったら、環境変数にパスを登録して、インストールがされているか
コマンドプロンプトにてバージョンの確認をします。

f:id:lo25131:20140329180242j:plain


MongoDBを始める


mongoにはJSONという記法を使っていきます。

JSONというのはJavaScript Object Notationの略で、
XMLなどと同様のテキストベースのデータフォーマットです。



普通のDBと異なり、コマンドプロンプトを二つ使っていきます。
二つ使うこととして、

一つをサーバー用
もう一つをコマンド用として使います。


まずサーバーを起動します。
MongoDBの保存したディレクト入りのbinにアクセスします。

私の場合はこちらにあるので、cdコマンドで移動します。

C:\data\mongodb-win32-x86_64-2008plus-2.4.9\bin


そして 

mongod というコマンドを入力するとサーバーが立ち上がるはずです。

f:id:lo25131:20140329184013j:plain

こんなかんじになればいいと思います。

サーバーを終了するには、 Ctrl+C で終了出来ます。


そしてもうひとつの方では

mongo とコマンドを入力すると起動できます。

f:id:lo25131:20140329184254j:plain

また、exit で終了できます。


mongodbではJSONで記述できるので、JavaScriptが使えます。
なので、変数を格納するときなどは、

var x =5;

とか 日時を見るために

new Date();

とかも使えます。


f:id:lo25131:20140329185606j:plain


基本的なデータベースコマンド

データベースの一覧を見る

show dbs;


データベースの変更

use データベース名;


データベースの作成

まずuseコマンドで新規のデータベースを指定します。

use 新規データベース名;

その後に、データベースの中にコレクションを作成することで、データベースが作られます。


db.createCollection("コレクション名");


f:id:lo25131:20140329195403j:plain



基本的なコレクションコマンド

コレクションの作成


db.createCollection("コレクション名");

コレクションの一覧を見る

show collections;

また、system.というのがあるかもしれないが、それは気にしなくていい。

コレクションの削除


db.コレクションの名前.drop();


名前の変更

db.コレクション名.renameCollection("新しいコレクション名");


ドキュメントの操作

データの入力

ここでJSONを使っていきます。

db.データベース名.insert({"カラム1":"データ1","カラム2":"データ2"});


例:
db.データベース名.insert({"name":"lotos","email":lotos.welt@gmail.com"});


データの一覧を見る

db.データベース名.find();

データの削除

db.データベース名.remove();


条件を指定した抽出


例: スコアが3のものを抽出
db.sample.find({"score":3});



例: スコアが3のものを名前だけ抽出
db.sample.find({"score":3},{"name":true});

~ではないもの

$ne

例: スコアが3ではないものを抽出
db.sample.find({"score":{$ne:3}});

~より大きい時

$gt

例: スコアが3より大きいものを抽出
db.sample.find({"score":{$gt:3}});

~以上の時

$gte

例: スコアが3以上のものを抽出
db.sample.find({"score":{$gte:3}});


~より小さい時

$lt

例: スコアが3より小さいものを抽出
db.sample.find({"score":{$lt:3}});


~以下の時

$lte

例: スコアが3以下のものを抽出
db.sample.find({"score":{$lte:3}});



例: 組み合わせも可能
db.sample.find({"score":{$gt:3,$lt:5}});



並び替え

昇順に並び替える

sort({"並び替えるもの":1)}


例: スコアの値で昇順に並び替える
db.sample.find().sort({"score:1});


降順に並び替える

sort({"並び替えるもの":-1)}


例: スコアの値で降順に並び替える
db.sample.find().sort({"score:-1});

1件だけ表示させる

findOne()


例:
db.sample.findOne();


3件だけ表示させる

find().limit(3)

例:
db.sample.find().limit(3);


2番めのドキュメントから3つ分抽出

skip(2).limit(3)

例:
db.sample.find().skip(2).limit3):

抽出したものの件数を調べる

count()

例:
db.sample.find().count();


ユニークな値を抽出

distinct("抽出するもの")

例:
db.sample.distinct("name");



【集合】

~だけ

$in

例:0と1のものだけ抽出される
db.sample.find({"name":{$in:["user-0","user-1"]}});

~ではないもの

$nin


例:0と1の中にないもの
db.sample.find({"name":{$nin:["user-0","user-1"]}});

存在しているか

$exists


例:emailが存在しているかどうか
db.sample.find({"email":{$exists:true}});



【インデックスを設定】

indexを一覧で見る

db.データベース名.getIndexs();


インデックスの作成

db.データベース名.ensureIndex({"つけるもの":1});


インデックスの削除

db.データベース名.dropIndex({"つけるもの":1});


インデックスにユニークの設定

db.データベース名.insert({"つけるもの":1},{"unique":true});


ドキュメントの更新

データの更新

$set

例: 名前がlotosのスコアを50に更新
db.sample.update({"name":"lotos"},{$set:{"score":50}});

データを増やして更新

$inc

例: 名前がlotosのスコアを20増やして更新
db.sample.update({"name":"lotos"},{$inc:{"score":20}});


データを減らして更新

$dec

例: 名前がlotosのスコアを20減らして更新する
db.sample.update({"name":"lotos"},{$dec:{"score":20}});

スコアを消す

$unset

例: 名前がlotosのスコア自体をなくす
db.sample.update({"name":"lotos"},{$unset:{"score":1}});

名前を変える

$rename

例:名前がlotosのスコアの名前を変える
db.sample.update({"name":"lotos"},{$rename:{"score":"myscore"}});