mongodbのコマンドメモ
※2016/3/24更新
- マーケデータの中身をざっくり見たり、デモグラ分析する時に使用するmongodbのコマンドをまとめはじめました。
mongoに入る
[kotatsu@cat01 ~]$ mongo
DB一覧を見る
- その後、「show dbs」と記入しEnter。DB一覧が出る
[kotatsu@cat01 ~]$ mongo > show dbs admin (empty) shironeko_db 1.234GB kuroneko_db 1.222GB cyatora_db 0.333GB
- 使用するDBを「use [DB名]」で指定しEnterを押下
- 指定したDBにスイッチした旨のコメントが出る
> use shironeko_db switched to db shironeko_db
コレクション一覧を見る
- DB内部のコレクション一覧を表示させるときは「show collections」
> show collections shiro-san tama-san sati-san
DBを消去する
- DB名をuseで選択した後に、dropを行う
> use shironeko_db; > db.dropDatabase();
コレクションを消去する
- DB名をuseで選択した後に、dropを行う
> use shironeko_db; > db.shiro-san.drop() #db.collectionname.drop()
コレクション名を変更する
- mongoに入りDBを指定したのち、リネームをする
> [kotatsu@cat01 ~]$ mongo > use shironeko_db; > show collections shiro-san tama-san ←tama-sanからtamako-sanに変更したい > db.tama-san.renameCollection("tamako-san"); ↑こちらのコマンドでリネームする ※db.[現在のコレクション名].renameCollection("[変更したいコレクション名]") > show collections shiro-san tamako-san ←tama-sanからtamako-sanに変更された
コレクションの指定カラムから指定単語を抽出する
- 例として、shironeko_db内のコレクション"shiro-san"にある、"ごはん"カラムから"カニカマ"を抽出します
- (白猫のシロさんは、ごはんに鰹節や甘エビなどをもらってますが、その中でカニカマを食べている行だけを抜き出します)
> [kotatsu@cat01 ~]$ mongo
> use shironeko_db;
> db.shiro-san.find({"gohan" : "kanikama"});
※db.[コレクション名].find({"カラム名" : "抽出したい単語"})
時間を指定して抽出(検索)する
- 例として、"shironeko_db"内のコレクション"shiro-san"から、時間の入っている"created_at"カラムを使用して、8/1の0時以降のものを抽出する
- "created_at"カラムには、ISODateの形式で日時データが入っているとする
- "以降(以上)"の場合は$gteを使用する。8/1の0時のレコードも含む。0時の境界を含みたくない場合は$gtにする
> [kotatsu@cat01 ~]$ mongo > use shironeko_db; > db.shiro-san.find({created_at:{"$gte" : ISODate("2015-08-01T00:00:00")}}); ↑8/1の0時以降のレコードが表示される > db.shiro-san.find({created_at:{"$gte" : ISODate("2015-08-01T00:00:00")}}).count(); ↑上記の件数をカウントしたいときは、最後に.countをつける
"~以上""~未満"などの表現には下記を使用する
意味 | 対応するコマンド |
---|---|
以上(※境界の数値を含む) | $gte |
以下(※境界の数値を含む ) | $lte |
超える・より大きい(※境界の数値を含まない) | $gt |
未満・より小さい(※境界の数値を含まない) | $lt |
一定の時間・期間を指定して抽出(検索)する
- 例として、"shironeko_db"内のコレクション"shiro-san"から、時間の入っている"created_at"カラムを使用して、8/1の0時以降(以上)~8/2の0時未満(8/2の0時は含まない)のものを抽出する
- "created_at"カラムには、ISODateの形式で日時データが入っているとする
- 「~以上、~未満」はよく使用する形式だが、"以上(以降)"は$gte、"未満"は$ltを使用する
> [kotatsu@cat01 ~]$ mongo > use shironeko_db; > db.shiro-san.find({created_at:{"$gte" : ISODate("2015-08-01T00:00:00"), "$lt" : ISODate("2015-08-02T00:00:00")}}); ↑8/1の0時以降~8/2の0時未満のレコードが表示される > db.shiro-san.find({created_at:{"$gte" : ISODate("2015-08-01T00:00:00"), "$lt" : ISODate("2015-08-02T00:00:00")}}).count(); ↑上記の件数をカウントしたいときは、最後に.countをつける
コレクションのカラムから、重複を省いてカウントする
- 例として、"shironeko_db"内のコレクション"shiro-san"から、ごはんの種類の入っている"ごはん"カラムの重複を抜いて、抽出する
- (白猫のシロさんは、ごはんに鰹節や甘エビ、かにかまなどをもらってますが、それらがいったい何種類あるのかを抽出します)
> [kotatsu@cat01 ~]$ mongo
> use shironeko_db;
> db.getCollection('shiro-san').distinct("gohan").length
27 ←27種類のごはんを食べていました
コレクションのカラムから、重複を省いて一覧を出す
- 例として、"shironeko_db"内のコレクション"shiro-san"から、ごはんの種類の入っている"ごはん"カラムの重複を抜いて、抽出する
- ※ " は ' でもOKです
> [kotatsu@cat01 ~]$ mongo > use shironeko_db; > db.shiro-san.distinct("gohan"); ※db.collection_name.distinct("column_name"); { "0" : "鰹節", "1" : "キャットフードA", "2" : "お刺身", (中略) "26" : "甘エビ" } ←27種類のごはんの一覧が出る
コレクション内のカラムと単語を指定し、それが含まれるレコードを取得する
- 例として、"shironeko_db"内のコレクション"shiro-san"から、ごはんの種類の入っている"ごはん"カラムの中の鰹節のみを抜いて、抽出する
- (白猫のシロさんは、ごはんに鰹節やカニカマなどさまざま食べてますが、その中でも鰹節だけ抽出します)
> [kotatsu@cat01 ~]$ mongo > use shironeko_db; > db.shiro-san.find({"gohan" : "鰹節"}) ※db.コレクション名.find({"カラム名" : "抽出したい単語"}) { "id" : 12, "gohan" : "鰹節", "created_at" : ISODate("2016-01-01T11:11:11.000Z"), "name" : "shiro-san", } { "id" : 15, "gohan" : "鰹節", "created_at" : ISODate("2016-01-02T22:22:22.000Z"), "name" : "shiro-san", } ↑鰹節は2回、2016年1月1日と2日に食べていたことがわかりました