More than 1 year has passed since last update.

mongodbのユーティリティツールとして mongoexport があります.
mongoexport は,いわゆるダンプコマンドで,mongodbに接続して csv もしくは json 形式でファイル保存することができます.

簡単な使い方

$ mongoexport -h $MONGO_HOST --db $MONGO_DBNAME --collection $COLLECTION_NAME -o output.json

という感じで使います.これで指定したコレクションのjson形式のファイルが output.json として保存されます.

query オプション

mongoexport のオプションのひとつとして --query があります.
export の条件を指定できるもので,find などで利用する query とほぼ同様の形式で指定できます.

例えば name が "taro" のレコードのみを export したいときは

$ mongoexport -h $MONGO_HOST --db $MONGO_DBNAME --collection $COLLECTION_NAME -o output.json --query '{"name": "taro"}' 

となります.

日付型の範囲指定をしたい!!!!

通常のmongo shell などで find で日付範囲をするときは

db.hogehoge.find({"created_at": {"$gte" : ISODate("2011-11-01T00:00:00+09:00"), "$lte" : ISODate("2013-11-02T00:00:00+09:00")}})

のように ISODate をかませて使います.なのでmongoexportでも同様に

--query '{"created_at":{"$gte": ISODate("2011-11-01T00:00:00+09:00"), "$lte" : ISODate("2013-11-02T00:00:00+09:00")}}'

とクエリを追加して実行したのですが

assertion: 16619 code FailedToParse: FailedToParse: Bad characters in value: offset:25

というエラーが!!

解決策: new Date で実行する

どうやら ISODate は使えないようでした.
そこで次のように new Date() で指定して実行します.引数はUNIXTIME(単位: ミリ秒 )なので注意してください.

--query '{"created_at":{"$gte": new Date(1320073200000), "$lte" : new Date(1383318000000)}}'

unixtime をコマンドラインで導くには date コマンドでこんな感じでいけます.

$ date -d '2011-11-01T00:00:00+09:00' '+%s'000
1320073200000

参考

http://www.buraktas.com/mongoexport-query-with-using-date/