■ドットインストールの動画はこちら
http://dotinstall.com/lessons/basic_mongodb_v3
■インストールから起動まで
http://qiita.com/morizyun/items/b9f7d8f79803d80e9a21
■mongoDBをスタートさせる
・ターミナルで下記コマンド打つ
→mongo
※「mongo (DB名)」と打つとそのuse (DB名)を省略できる
■DBの一覧表示/作成/内容表示/削除
・show dbs;
→db一覧を見れる
・use (DB名);
→(DB名)に切り替える(なければつくる)
・db.stats();
→dbの中身を表示する
・db.dropDatabase();
→dbを削除する
■Collectionを触る
・db.createCollection("●●");
→●●というなまえのコレクションの作成
・show collections;
→コレクション一覧を表示
・db.●●.renameCollection("▲▲");
→●●という名前のコレクションを▲▲という名前に変更
・db.●●.drop();
→●●という名前のコレクションを削除する
■コレクションにドキュメントを入れたり表示したり消したり→.insert(),.find(),.remove()
・db.(コレクション名).insert( { field1:value1, field2: value2 } );
→●●コレクションにデータを入れる(※コレクションが存在しない名前のときは自動的に作ってくれる!)
※JavaScriptがそのまま使えるので、
for (var i=0; i<10; i++){
... db.users.insert({
... score: Math.random()
... });
... }
なんて書き方もOK
・db.(コレクション名).find();
→コレクション内のデータ一覧表示
・db.(コレクション名).remove({});
→コレクション内のデータ全削除 ※{}は空のオブジェクトを渡している!
・
■コレクションに条件付きでドキュメントを表示→.find({表示条件})
・db.(コレクション名).find({field: 指定する内容});
→{}内に希望の条件を書いていく
・db.(コレクション名).find({field: {\$gte:50}});
→fieldの値が50以上で指定
※\$gte(greatet than equalの略) 50以上
※\$gt(greatet thanの略) 50より大きい
※\$lte(less than equalの略) 50以下
※\$lt(less thanの略) 50より小さい
※\$eq(equqlの略)
※\$ne(not equalの略)
※JSの正規表現も使える
例えば…find({field: {\$eq: /t/}})→tを含む
find({field: {\$eq: /^t/}})→tから始まる
・db.(コレクション名).distinct("key");
→指定したkeyの値一覧を出してくれる
■コレクションに複雑な条件付きでドキュメントを表示→.find({抽出条件})
・db.(コレクション名).find({field1: 抽出したい内容1, field2: 抽出したい内容2});
→AND指定は「,」区切り
・db.(コレクション名).find({\$or: [{field1: 指定する内容1},{field2: 指定する内容2}}]});
→OR指定は、{\$or: [条件並べる]}
・db.(コレクション名).find({field: {\$in: [値1,値2]}})
→同じフィールド内で値を複数指定
・db.(コレクション名).find({field: {\$exists: true}})
→$existでそのフィールドが存在するかどうかで抽出してくれる(1/0でもOK)
■表示するフィールドを指定してみる→.find({抽出条件},{表示のON/OFF})
・db.(コレクション名).find({}, {field1: true, field2: true});
→指定したコレクションのfield1とfield2を表示。
※最初の{}は全件表示指定、2個目の{}内のtrue/falseは1/0でもOK
※true/false(もしくは1/0)のしては混在させてはダメ!→例{field1: true, field2: false}はerror!
※例外的にデフォルトで入っている_idは混在させてOK→例{_id: false, field: true}はOK!
■並び替えて表示→.sort()
・db.(コレクション名).find({}, {field1: true, field2: true}).sort({field1: 1});
→field1について昇順で表示される。sort({field1: -1})なら降順
■表示数を制限して表示→.limit()
・db.(コレクション名).find({}, {field1: true, field2: true}).limit(●);
→上から●件のみ表示
※db.(コレクション名).findOne({}, {field1: true, field2: true}); で1件取得もOK
■最初の数件を飛ばして表示→.skip()
・db.(コレクション名).find({}, {field1: true, field2: true}).skip(●);
→●番目から表示 ※数え方は、0,1,2…と0からスタート!
■ドキュメントを更新する→.update({抽出条件},{\$set{更新内容}})
・db.(コレクション名).update({field名: 抽出したいfieldの値},{\$set:{変更したいfield1:変更後の値1, 変更したいfield2:変更後の値2}});
→\$setのところに変更を書く
※\$setをつけない場合はドキュメントが丸ごと更新することもできる。(扱い注意!)
→db.users.update({field名: 抽出したいfieldの値},{変更したいfield1:変更後の値1, 変更したいfield2:変更後の値2});
※デフォルトでは抽出条件に合致した最初の一件だけが更新されます。
※抽出条件に該当するもの全ての値を更新したい場合は、3番目の引数に{multi:true}を指定する
→db.(コレクション名).update({field:抽出したいfieldの値},{$set: {score: 100}},{multi:true});
■現在のドキュメントの値を利用した更新→ \$inc, \$mul
・db.(コレクション名).update({抽出条件},{\$inc: {変更したいfield:+(-)数字}})
→現在の値から+(or-)できる
・db.(コレクション名).update({抽出条件},{\$mul: {変更したいfield:数字}})
→現在の値から●倍できる
■fieldの変更/追加/削除→\$rename,\$set,\$unset
・db.(コレクション名).update({抽出条件},{\$rename: {変更したいfield名: "変更後のfield名"})
→field名が変更される
・db.(コレクション名).update({抽出条件},{\$set: {追加したいfield名: 追加したいfieldの値"})
→fieldが追加される
・db.(コレクション名).update({抽出条件},{\$unset: {削除したいfield名: ""})
→fieldが削除される
■抽出条件に一致する情報があれば更新、なければ作成する→upsert
・db.(コレクション名).update({抽出条件},{$set: {更新/追加したいfield名: 更新/追加したいfieldの値"},{upsert: true});
■remove()の使い方
・remove({抽出条件})
→remove()の()内にはfind()やupdate()と同じく抽出条件が入る!
■インデックスに関して
・db.(コレクション名).getIndexes();
→index一覧を表示
・db.(コレクション名).createIndex({score: -1});
→index の作成(scoreは降順に表示するのがデフォルトに指定?)
・db.(コレクション名).dropIndex("score_-1");
→indexの削除
・db.(コレクション名).createIndex({name: 1}, {unique: true});
→unique の設定
■バックアップするためのコマンド
・mongodump -d mydb
→dumpファイルができる
・mongorestore --drop
→バックアップファイルから復元させて、今あるのを削除してくれる(--drop)
※mongodump(mongorestore) --helpでオプションを見れる!
コレクションごとにバックアップをとるとかも可能に。