* MongoDB [#h2608ee8]
#setlinebreak(on)

#contents
-- 関連
--- [[Railsのmongoidでユーザ認証]]

** 初期設定など [#oe1e3596]

#html(<div style="padding-left:10px;">)

*** インストール(Mac) [#e5c2a3e9]
#myterm2(){{
brew install mongodb
}}

*** データ格納用ディレクトリ作成 [#j0b15a35]
#myterm2(){{
sudo mkdir -p /data/mongodb
}}

*** 権限付与 [#d07b1833]
#myterm2(){{
chown magata /data/mongodb
}}

*** DB起動 [#lb6c6cbd]
#myterm2(){{
mongod --dbpath /data/mongodb
}}
※ デフォルトは /data/db

*** クライアント起動 [#ldc882fa]
#myterm2(){{
mongo
}}

#html(</div>)

&br;

** DBの作成/削除など [#re6e8f98]
#html(<div style="padding-left:10px;">)

*** DB作成/切替 [#jb854f4a]
#myterm2(){{
use DB名
}}

*** DB削除 [#h49ee291]
#myterm2(){{
use DB名
db.dropDatabase();
}}

*** 現在接続しているDBの確認 [#xe4f0254]
#myterm2(){{
db.getName()
}}

*** DB一覧の確認 [#h502c177]
#myterm2(){{
show dbs;
}}

#html(</div>)

&br;

** ユーザの登録/更新など [#ua33058f]
#html(<div style="padding-left:10px;">)

** ユーザ一覧 [#r5a92192]
#myterm2(){{
use admin;
db.system.users.find();
}}

*** ユーザ作成 [#n73499e9]
#myterm2(){{
db.createUser(
  {
    user:"作成したいユーザー名",
    pwd:"パスワード",
    roles:[
       { 
           "role" : "dbOwner",
            "db" : "DB名"
       }
    ]
  } 
);
}}

*** ユーザ更新 [#z062bae5]
#myterm2(){{
use DB名;
db.updateUser(
  "ユーザー名",
  {
    roles:
    [
      {
        role: "dbOwner",
        db: "DB名"
      }
    ]
  }
);
}}

*** ユーザ削除 [#rd77cd4d]
#myterm2(){{
use admin;
db.system.users.remove({"_id" : "DB名.ユーザー名"});
}}

*** ユーザ認証 [#rf3fda27]
#myterm2(){{
db.auth("admin","パスワード")
}}

#html(</div>)

&br;

** 認証モードをONにしてDB起動する [#yae55c40]
#html(<div style="padding-left:10px;">)

*** /etc/mongod.conf を作成 [#u21a940a]
#myterm2(){{
sudo vim /etc/mongod.conf
auth = true
}}

*** DB起動 [#ze92c535]
#myterm2(){{
mongod -f /etc/mongod.conf
}}


#html(</div>)

&br;

** コレクションの操作 [#p9ed45c2]
#html(<div style="padding-left:10px;">)

*** 存在するコレクションを確認 [#y74fd862]
#myterm2(){{
show collections;
}}

*** コレクション作成 [#s5c56ec4]
#myterm2(){{
db.createCollection('コレクション名');
}}

*** コレクション削除 [#j265dfca]
#myterm2(){{
db.コレクション名.drop();
}}

#html(</div>)

** 索引の操作 [#t37b39d0]
#html(<div style="padding-left:10px;">)

*** 索引の確認 [#t97e6089]
#myterm2(){{
db.コレクション名.getIndexes();
}}

*** 索引の作成(col1 に対してを索引(昇順)を作成) [#h2302afb]
#myterm2(){{
db.コレクション名.ensureIndex({"col1":1});
}}

*** 索引の作成(col1 に対してをユニークな索引(昇順)を作成) [#ue5216b2]
#myterm2(){{
db.コレクション名.ensureIndex({"col1":1}, {"unique":true});
}}

*** 索引の作成をバックグラウンドで行う場合 [#w3059f97]
#myterm2(){{
db.コレクション名.ensureIndex({"col1":1}, { background: true});
}}}

例)
#myterm2(){{
db.books.ensureIndex({"col1":1};
db.books.ensureIndex({"col1":1}, {"unique":true});
}}

*** 索引の削除 [#o05c1cf2]
#myterm2(){{
db.コレクション名.dropIndex({"col1":1});
}}}

#html(</div>)

** データの操作 [#t3e8822f]
#html(<div style="padding-left:10px;">)

*** 条件検索 [#mfa20957]
#myterm2(){{
db.books.find({name:"book1"});
}}

*** LIKE検索 [#ve12a0b6]
#myterm2(){{
db.books.find({name:/test1/});
}}

*** OR検索 [#b4c59dda]
#myterm2(){{
db.books.find({ "$or": [ { "name": "test5" }, { "name": "test10" } ] });
}}

*** AND検索 [#i8f19375]
#myterm2(){{
db.books.find({ "name": /9$/, "price": {$lt:10000} });
}}

*** 大小比較 [#edd1c2b5]
#myterm2(){{
db.books.find({price: {$gt:30000} });   // >
db.books.find({price: {$gte:30000} });  // >=
db.books.find({price: {$lt:30000} });   // <
db.books.find({price: {$lte:30000} });  // <=
}}

*** IN句 [#de26b609]
#myterm2(){{
db.books.find({name: {$in: ["test5", "test10"]} });
}}

*** distinct [#a47b4fd6]
#myterm2(){{
db.books.distinct("price");
}}

*** 1件のみ取得 [#i39709f8]
#myterm2(){{
db.books.findOne({name:"book1"});
}}

*** 選択列を指定する [#xee1c6b6]
#myterm2(){{
db.books.find({name:/test1/}, {id:1,name:1});
}}

*** sort [#r9b1cc26]
#myterm2(){{
db.books.find().sort({name:1});   // 昇順
db.books.find().sort({name:-1});  // 降順
}}

*** limit, offset [#x314cd17]
#myterm2(){{
db.books.find().skip(10).limit(10);
}}

*** count [#y399c256]
#myterm2(){{
db.books.count();
}}

*** count [#c7cf5fc3]
#myterm2(){{
db.books.count({name:"book2"});
db.books.find({name:"book1"}).count(true);
db.books.find({name:"book1"}).length();
}}

*** 指定した列が存在する行数をcount [#c6fdcc0c]
#myterm2(){{
db.books.find({author : {$exists: true} }).length();
}}

*** 実行計画 [#c53a5492]
#myterm2(){{
db.books.find({name:"book1"}).explain()
}}

*** 集約 [#kf82c6da]
#myterm2(){{
db.books.aggregate({$group:{ "_id" : "$price", "count" : { "$sum" : 1 } } })
db.books.aggregate({$group:{ "_id" : {"price":"$price","auther":"$auther"}, "count" : { "$sum" : 1 } } })
}}

*** 条件で絞ったうえで集約 [#k0063d9a]
#myterm2(){{
db.books.aggregate( { $match: {"name":/20160420/} }, { $group: { "_id" : {"price":"$price"}, "count" : { "$sum" : 1 } } })
}}

*** insert [#w8b7c0ea]
#myterm2(){{
db.books.insert({"name":"book1", price:1008});
}}

*** update [#aadd1800]
#myterm2(){{
db.books.update({"name":"book1"},{$set:{"price":2016} });
}}

*** 全てのデータをupdate [#u79618d0]
#myterm2(){{
db.books.update({}, {$set: {"author" : "unknown"} }, false, true);
}}

*** delete [#wa382aaf]
#myterm2(){{
db.books.update({}, {$set: {"author" : "unknown"} }, false, true);
}}

*** upsert [#bde24783]
#myterm2(){{
db.users.update({"name": "book1"}, {$set: {"author" : "unknown"} }, true);
}}

#html(</div>)


** その他 [#g2957543]
#html(<div style="padding-left:10px;">)


*** 外部ファイルを実行 [#o0f479d1]
#myterm2(){{
mongo DB名 /path_to_command/command.js
}}
※ フルPATHで指定?


*** 外部ファイルを実行(mongoクライアントから) [#i33c11cd]
#myterm2(){{
load("command.js");
}}


*** エクスポート [#sae7c15f]
#myterm2(){{
mongodump -d DB名 -c コレクション名
}}
※カレントディレクトリ配下に dump/DB名というディレクトリが作成され、コレクション名.bson と コレクション名.metadata.json というファイルが作成される。


*** インポート [#lb276479]
#myterm2(){{
mongorestore -d DB名 -c コレクション名 コレクション名.bson
}}
※ コレクション名.metadata.json からメタ情報も読み取って適用してくれる。

#html(</div>)

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS