動機
開発環境とリリース前確認用の環境で、MongoDBのデータに差異が無いか確認しようと思ったけど、
数十万件あるデータを比べるとか無理じゃね?と思った時に。
mongoexport使う
mongoexportで出力して、ちょいちょいと整形してやればよろし。
クエリも投げられるので、対象データの絞り込みは容易。
一致するはず!と期待しているフィールドを選んで、--fields
と --sort
にそれぞれ指定してあげる。
mongoexport --host example.mongo --db hoge --collection piyo --query '{userId:ObjectId("xxxxx")}' --fields name,credit,zip --sort '{name:1,credit:1,zip:1}' --out hoge.json
mongoexport --host example.mongo --db fuga --collection piyo --query '{userId:ObjectId("xxxxx")}' --fields name,credit,zip --sort '{name:1,credit:1,zip:1}' --out fuga.json
そんままでは_id
が当然のように一致しないので、除去する。_id
が無いなら気にしなくていい。
cat hoge.json | perl -pe 's/"_id" : \{ "\$oid" : "[a-f0-9]+" \}, //g' > hoge-trim.json
cat fuga.json | perl -pe 's/"_id" : \{ "\$oid" : "[a-f0-9]+" \}, //g' > fuga-trim.json
あとはdiffとるだけ。
diff *-trim.json
お手軽。