猫のこたつ

元理系研究職。日々の自分のメモとして書き始めました。

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日に食べていたことがわかりました