masalibの日記

システム開発、運用と猫の写真ブログです

mongodbのメモ

メモです
NoSQLで有名なDBです

会社のシステム的には使っているのですが
使いこなせる人が辞めたり、移動したりして今は誰も使いこなせない状態です
今後、集計をおこなうために勉強した

クライアントツール(gui)のインストール

Robo 3T - formerly Robomongo — native MongoDB management tool (Admin UI)
→ ダウンロードで環境にあわせたソフトをインストール
接続は直接指定もできるのですが、ローカルからとそのネットワークのみしか接続できなかったので
SSHを踏み台サーバーとして接続する方式で接続した
これはmysqlのツールと同じ
接続するとDBがあるので
テーブル(コレクション?)一覧が表示されるので
ダブルクリックすると取得するJSが表示される

db.getCollection('login_history').find({})

そちらを修正していく

whereの指定方法

db.getCollection('login_history')
.find({ userId :"5914037b"})
.sort({_id: -1})
.limit(1)

findの次のカッコで指定できます

{ userId :"5914037b"}

上記の場合はuseridが5914037bのデータを取得しています

ソートもカラムで指定できる

-1が降順
1が昇順

条件が入れ子の場合の指定方法

データが入れ子の場合の条件指定は単純に
.(ドット)でつないでいくだけです

{
    "client" : {
        "platform" : "iOS",
        "version" : "11.12.13",
        "userId" : "c871eb946596b255",
        "tttt" : "TTTTTT",
        "ttt1" : "TTTTTT",
        "ttt2" : "TTTTTT",
        "ttt3" : "TTTTTT",
        "ttt4" : "TTTTTT"
    }
}

上記の場合のデータを条件で取得するクエリーは以下のようになる

db.getCollection('login_history')
.find({ "client.userId" :"5914037b"})
.sort({_id: -1})
.limit(1)

出力したカラムを指定する場合

db.getCollection('login_history')
.find(
	{ "client.userId" :"5914037b"},
	{
		  "client.userIdId": 1
		, "client.platform": 1
		, "client.version": 1
		, _id: 0
	 }
)
.sort({_id: -1})
.limit(1)

条件のあとに出力したいカラムを指定する
デフォルトだと_idがでるのでそれはいらないので消す

参考URL
www.yoheim.net

mongodbの_id objectidとは

要するにunixタイムスタンプにマシンIDとプロセスIDとカウンターをセットしたもの

toshitanian.hatenablog.com

作ったJSは保存できる

そして実行できるはず
$ mongo db_name --quiet query.js
dqn.sakusakutto.jp


あれ・・・何も出力されない??
現在、調査中です