MongoDBでドキュメントを別のコレクションにインポートする方法

mongodbにアクセスログを集めて解析してるんだけど、アプリのデータと組み合わせた解析結果が欲しくなった。

とは言うものの、元々コレクションを別に作ってたので簡単には参照できず...

結構、アプリべったりに作ってるところもあるので、あんまり気にせず同じコレクションにぶち込むことに。

パフォーマンスとか、悪くなってから考えればいいよね!

 

というわけで、ほとんどの人に必要なさそうなTIPSをメモ。

document単位でexport/importするには以下のコマンドが良いらしい。

//Jsonファイルにて特定コレクションを出力する
mongoexport -d DatabaseName -c CollectionName fileName.json
 
//Jsonファイルから特定コレクションみの更新する
mongoimport -d DatabaseName -c CollectionName fileName.json

バックアップ

まずはインポート先とインポート元をバックアップ

mongodump --db app_db
mongodump --db fluent

インポート元をJSONにエクスポート

インポート元をJSONにエクスポート。ちまちまやるのも面倒なのでさっきのバックアップファイル名を元に下記コマンドで一括して出力

ls -1 dump/fluent/*.bson|sed 's/.*\///g'|sed 's/\..*//g'|awk '{print  "mongoexport -d fluent -c "$1" -o tmp/json/"$1".json"}'|sh 

インポート

次は出力したJSONを目的のコレクションにインポート。同じく面倒なので一括してファイル名からコマンドを作る

ls -1 dump/fluent/*.bson|sed 's/.*\///g'|sed 's/\..*//g'|awk '{print  "mongoimport -d test -c "$1" tmp/json/"$1".json"}'|sh

これで取り込みは完了。自分で任意のJSONを読み込ませたい時にもこの方法でいけるはず。どうでも良いけど、こういうawkの使い方はevalライクで大好きです><

 

では、Happy Hacking !