INPUTしたらOUTPUT!

忘れっぽいんでメモっとく

MongoDB入門メモ

ドットインストールでMongoDB入門を終えたのでメモしとく


よく使われる用語

  • データベース
  • コレクション
    • RDBでいうテーブル
  • ドキュメント
    • RDBでいうレコード


データベースの操作

  • show dbs;
    • データベースの一覧を表示する
  • use [データベース名]
    • データベースを切り替える
    • 新しいデータベースを作成する
  • db.help()
    • helpを表示する
  • db.stats()
    • 統計情報を表示する
  • db.dropDatabase()
    • データベースを削除する


コレクションの操作

  • db.createCollection("[コレクション名]")
    • コレクションを作成する
  • show collections;
    • コレクションの一覧を表示する
  • db.[コレクション名].drop()
    • コレクションを削除する
  • db.[コレクション名].renameCollection("[新コレクション名]");
    • コレクションの名前を変更する


ドキュメントの操作

  • db.[コレクション名].insert({...});
    • コレクションにドキュメントを挿入する
    • 挿入するデータはJSON形式で記述する
  • db.[コレクション名].find();
    • ドキュメントを表示する
  • db.[コレクション名].remove();
    • ドキュメントを全て削除する
  • db.[コレクション名].update({[条件]}, {[キー]:[値]});
    • 条件にあてはまるドキュメントの内容を[キー]:[値]に更新する
      • 特定の項目だけ更新したい場合は$setを使用する
  • db.[コレクション名].update({[条件]}, {$set:{[キー]:[値]}})
    • 条件にあてはまるドキュメントのキーの値を更新する
  • db.[コレクション名].update({[条件]}, {$inc:{[キー]:[値]}})
    • 条件にあてはまるドキュメントのキーの値を指定した値だけ増減する
  • db.[コレクション名].update({[条件]}, {$unset:{[キー]:1}})
    • 条件にあてはまるドキュメントのキーを削除する
  • db.[コレクション名].update({[条件]}, {$rename:{[キー]:[変更後のキー]}})
    • 条件にあてはまるドキュメントのキーの名前を変更する
  • db.[コレクション名].update({[条件]}, {[更新内容]}, true})
    • 条件に合致するドキュメントがあれば更新
    • 条件に合致するドキュメントがなければ挿入
  • db.[コレクション名].update({}, {[更新内容]}, false, true})
    • すべてのドキュメントに対して更新

条件の指定の仕方

RDBMongoDB
SELECT * FROM [テーブル名];db.[コレクション名].find()
SELECT * FROM [テーブル名]
WHERE [列名] = [値];
db.[コレクション名].find({[キー]:[値]})
SELECT [列名1] FROM [テーブル名]
WHERE [列名2] = [値];
db.[コレクション名].find({[キー2]:[値]}, {[キー1]:true})
SELECT * FROM [テーブル名]
WHERE [列名] <> [値];
db.[コレクション名].find({[キー]:{$ne:[値]}})
SELECT * FROM [テーブル名]
WHERE [列名] > [値];
db.[コレクション名].find({[キー]:{$gt:[値]}})
SELECT * FROM [テーブル名]
WHERE [列名] >= [値];
db.[コレクション名].find({[キー]:{$gte:[値]}})
SELECT * FROM [テーブル名]
WHERE [列名] < [値];
db.[コレクション名].find({[キー]:{$lt:[値]}})
SELECT * FROM [テーブル名]
WHERE [列名] <= [値];
db.[コレクション名].find({[キー]:{$lte:[値]}})
SELECT * FROM [テーブル名]
WHERE [列名1] > [値1] AND [列名1] < [値2];
db.[コレクション名].find({[キー1]:{$gt:[値1], $lt:[値2]}})
SELECT * FROM [テーブル名]
ORDER BY [列名];
db.[コレクション名].find().sort({[キー]:1})
SELECT * FROM [テーブル名]
ORDER BY [列名] DESC;
db.[コレクション名].find().sort({[キー]:-1})
SELECT * FROM [テーブル名]
WHERE rownum=1;
db.[コレクション名].findOne()
SELECT * FROM [テーブル名]
WHERE rownum<=3;
db.[コレクション名].find().limit(3)
SELECT * FROM (
SELECT
ROW_NUMBER()
OVER (ORDER BY key ASC) AS rownumber,
[列名]
FROM [テーブル名]
) AS foo
WHERE rownumber >=2 AND rownumber <=5
db.[コレクション名].find().skip(2).limit(3)
SELECT * FROM [テーブル名]
WHERE [列名] IN([値1], [値2]);
db.[コレクション名].find({[キー]:{$in:[[値1],[値2]}})
SELECT * FROM [テーブル名]
WHERE [列名] NOT IN([値1], [値2]);
db.[コレクション名].find({[キー]:{$nin:[[値1],[値2]}})
SELECT * FROM [テーブル名]
WHERE [列名] IS NOT NULL
db.[コレクション名].find({[キー]:{$exist:true}})


Index

  • db.[コレクション名].getIndexes()
    • インデックスを表示する
  • db.[コレクション名].ensureIndex({[キー]:1})
    • キーの昇順でインデックスを作成する
  • db.[コレクション名].ensureIndex({[キー]:-1})
    • キーの降順でインデックスを作成する
  • db.[コレクション名].dropIndex({[キー]:1})
  • db.[コレクション名].ensureIndex({[キー]:1}, {"unique":true})
    • ユニークインデックスを作成する


外部ファイルからクエリを実行する

  • mongo [データベース名] [ファイル名]
    • shellなどから実行する場合
  • load([ファイル名])


バックアップ・リストア

  • mongodump [データベース名]
    • カレントディレクトリの下にdump/[データベース名]を作成しbson(JSONのバイナリ形式)ファイルでバックアップを作成する
  • mongorestore --drop
    • カレントディレクトリの下にdump/[データベース名]からリストアする
    • --dropオプションをつけるとデータベースを削除してからリストアする


JavaScript

MongoDBでは普通にJavaScriptが使用できる

var x = 5;
for (var i=5, i<10, i++) {
  db.users.insert({
    "name" : "user-" + i,
    "team" : i % 3,     
    "score" : Math.floor(Math.rondom()*100)
  })
}