masalibの日記

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

mongodbのメモ2

masalib.hatenablog.com
の続きです

mongodbを外部のクエリーを実行する方法

$ mongo db_name --quiet  query.js #間違い
$ mongo db_name --quiet  < query.js #正解

あれ・・・

参考にしたサイトだと

http://qiita.com/yuiseki/items/1c656d6bab0307e1510c
https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/

<

記号がなかったよ

f:id:masalib:20170822212132p:plain

わからないよ!!T_T

あと1年以上たった記事は注意が必要だJSの指定の仕方はバージョンによって違うのかな
あとこのJSは1取得、1行でかかないといけないの??
長文になったので改行していたらエラーになって動かなかった
調べきれていない

mongodbのDBをエクスポートする方法

この事に気がつかない為、さらにいらない事まで調べた
mongodbにはエクスポートの機能があった
mongoexport — MongoDB Manual 3.4

この機能を使えばコレクション(テーブル)単位での
バックアップがとれるみたいだった

$ mongoexport --db db_name --collection collection_name --out output.json

このエクスポートの機能は絞込(--query)はあるが、ソートがなかった
(できるのかもしれないけど自分はわからなかった)
ソートしたデータがほしかったからあきらめた

mongodbのDBをエクスポートでCSVにする方法

厳密にはCSVになっていないのですがCSVもどきができた
(次の処理をつくるのがめんどくさいので・・・)

単純に出力するとjson形式になってしまうので
print文を実行すると、内容のみを出力できた

db.getCollection('app.log')
.find({  "client.userId"  : "c871eb946596b255", _id: { $gt : ObjectId("59965440b265cd595e2a6c22")  } }  )
.sort({_id: -1})
.limit(1)
.forEach( function(a){print('"',a.client.userId,'","',a.client.platform,'","',a.client.version,'","',a.time,'"' )} );

結果

" c871eb946596b255 "," iOS "," 1.1.7 "," Sat Aug 19 2017 01:22:19 GMT+0900 "


あとは
「" 」→「ブランク」
「 "," 」→「,」
「 "」→「ブランク」
に置き換えすればCSVが完成!!


つぶやき

やったことがなく、無駄に時間がかかった
インデックスが「_id」しか設定されておらず
作った人は何も考えていないのではと感じる
考えていないならBIGQueryにいれてよ
1億レコードになるとmongodbでも遅いよ

はじめてのMongoDB (I・O BOOKS)

はじめてのMongoDB (I・O BOOKS)