- 追加された行はこの色です。
- 削除された行はこの色です。
- MongoDB へ行く。
* 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>)