Import Export Tools

based on v29 (2010/12/22 更新) - オリジナル

もしあるサーバーから他のサーバーへ、データベースの複製を行う場合は、今から紹介するツールを使用する必要はありません。
このツールは格納データ(これはuser、system双方のcollection内のドキュメントを指します)に対して操作を行うものであり、セーブ・ロードしていないデータや(capped)collection情報を保持しているメタデータに対して行われるものではありません(その意味で上記のデータベースの複製と異なります)。それらが必要ならば、このツールでデータをインポートする前のステップとして再構築しておく必要があります。これらの再構築もこのツールの操作として含ませたいと望む方は、SERVER-808に投票(vote)して下さい。

mongoimport

このユーティリティは1行がJSON/CSV/TSV形式の文字列からなる1つのファイルを読み込み、それらのデータをMongoDBの指定したdatabase,collectionへinsertを行います。ですのでdatabaseとcollectionを指定する必要があります。

options: 
--help              help情報を表示します 
-v [ --verbose ]    より詳細な出力をする場合に使用します。(e.g. -vvvvv のようにvを重ねることでより出力レベルが深くなっていきます) 
-h [ --host ]       接続するmongoのhost名を指定します("left,right" for pairs) 
-d [ --db ]         使用するdb名を指定します
-c [ --collection ] 使用するcollection名を指定します(some commands) 
-u [ --username ]   usernameを指定します
-p [ --password ]   passwordを指定します
--dbpath            mongodインスタンスに接続してデータを取得する替わりに、直接データファイルからインポートを行う場合はこのオプションでデータファイルのパスを指定します。その場合は、必ずデータがロックされている状態でないといけません。つまりmongodインスタンスがこのデータファイルにアクセスしている状態でこのオプションは使ってはいけません
--directoryperdb    もしdbpathが指定された時、各々のdbを別々のディレクトリに分けたい場合に指定します
-f [ --fields ]     フィールド名をコンマ区切りで指定します。例えば -f name,age
--fieldFile         1行ごとにフィールド名を指定します
--ignoreBlanks      もしこのオプションが指定された場合、CSV、TSV中の空フィールドは無視されます
--type              インポートするファイルのタイプを指定します。default: json (json,csv,tsv) 
--file              標準出力を使用しない場合に、インポート元のファイルパスを指定します
--drop              既に同名のcollectionが存在する場合はそれをdropしてからインポートを行います
--headerline        csv・tsvの場合、初めの行をheaderとみなす場合はこのオプションを指定します

例: Importing Interesting Types

MongoDBはJSONデータの中の特定のフォーマットで記述されたフィールドの値の型をサポートしています。MongoDBによって拡張された[いくつか型]がこのサポート対象です.例えばJSONはdate型をサポートしていませんが、以下のようなJSONライクな記述でMongoDBへのインポート時にはdate型といして判定されます:

 {"somefield" : 123456, "created_at" : {"$date" : 1285679232000}} 

このとき mongoimportcreated_at の値をdate型として返します。

Note: 今回の$dateのような $-prefixed が正しくパースされるためには "$date" のように必ずダブルクォーテーションによって囲まれている必要があります。

mongoexport

このユーティリティはあるcollectionをJSONかCSVの形式でエクスポートします。queryによってエクスポートしたいデータをフィルタリングしたり、指定したフィールドリストからのみエクスポートすることも可能です。

JSONもTSV/CSVも全てのデータ型をサポートしていません。このツールを使用する際には不本意な型変換が行われる可能性があることに注意して下さい。それを避けるには後述する mongodump を使用して下さい。

もしCSVで出力を行う場合は、 --csv オプションでカンマで区切られた順番でフィールド名を指定して下さい。

options: 
--help              help情報を表示します 
-v [ --verbose ]    より詳細な出力をする場合に使用します(e.g. -vvvvv のようにvを重ねることでより出力レベルが深くなっていきます) 
-h [ --host ]       接続するmongoのhost名を指定します("left,right" for pairs) 
-d [ --db ]         使用するdb名を指定します
-c [ --collection ] 使用するcollection名を指定します(some commands) 
-u [ --username ]   usernameを指定します
-p [ --password ]   passwordを指定します
--dbpath mongodインスタンスに接続してデータを取得する替わりに、直接データファイルからインポートを行う場合はこのオプションでデータファイルのパスを指定します。その場合は、必ずデータがロックされている状態でないといけません。つまりmongodインスタンスがこのデータファイルにアクセスしている状態でこのオプションは使ってはいけません
--directoryperdb    もしdbpathが指定された時、各々のdbを別々のディレクトリに分けたい場合に指定します
-f [ --fields ]     フィールド名をコンマ区切りで指定します。例えば -f name,age
-q [ --query ]      JSON文字列してクエリフィルターを記述します
--csv               JSONの替わりにCSVといてエクスポートする場合に指定します
-o [ --out ]        出力ファイル名を指定します。指定されない場合は標準出力に表示されます

mongodump

mongodumpはdatabase(collection)単位でバイナリ形式(bson)で出力を行います。またこれはMongoDBプロセスをロックさせる必要がなく、バックグラウンドで動作してくれます。

もしshardingを行っていてこの方法でデータの移行を行う場合には、shardの設定もダンプする必要があり、かつ復元したdatabaseの方でshardの設定をそのダンプした設定で上書きする必要があります。
options: 
--help              help情報を表示します 
-v [ --verbose ]    より詳細な出力をする場合に使用します(e.g. -vvvvv のようにvを重ねることでより出力レベルが深くなっていきます) 
-h [ --host ]       接続するmongoのhost名を指定します("left,right" for pairs) 
-d [ --db ]         使用するdb名を指定します
-c [ --collection ] 使用するcollection名を指定します(some commands) 
-u [ --username ]   usernameを指定します
-p [ --password ]   passwordを指定します
--dbpath            mongodインスタンスに接続してデータを取得する替わりに、直接データファイルからインポートを行う場合はこのオプションでデータファイルのパスを指定します。その場合は、必ずデータがロックされている状態でないといけません。つまりmongodインスタンスがこのデータファイルにアクセスしている状態でこのオプションは使ってはいけません
--directoryperdb    もしdbpathが指定された時、各々のdbを別々のディレクトリに分けたい場合に指定します
-o [ --out ]        ダンプ先のディレクトリ名を指定します 
-q [ --query ]      JSON文字列してクエリフィルターを記述します

例: 全データのダンピング

全てのdatabaseの、全てのcollctionをダンプしたい場合は、mongodump コマンドのオプションとして --host のみを指定します:

$ ./mongodump --host prod.example.com 
connected to: prod.example.com 
all dbs 
DATABASE: log to dump/log 
log.errors to dump/log/errors.bson 
713 objects 
log.analytics to dump/log/analytics.bson 
234810 objects 
DATABASE: blog to dump/blog 
blog.posts to dump/log/blog.posts.bson 
59 objects 
DATABASE: admin to dump/admin 

実行後、カレントディレクトリに"dump"という名前のフォルダができているはずです。database単位でのdumpはsystem.indexes.bsonという名前でインデックス情報も同時にバックアップされます。

さらにデフォルトポートで稼働している場合はオプション無しで実行できます:

 $ ./mongodump 

例: Single Collectionのダンピング

もし1つのcollectionのみダンプしたい場合は以下のオプションを指定します。そして1つの<collection name>.bson ファイルが生成されます。

$ ./mongodump --db blog --collection posts 
connected to: 127.0.0.1 
DATABASE: blog to dump/blog 
blog.posts to dump/blog/posts.bson 
59 objects
現在は1つのcollectionを指定したmongodumpではindexは同時にバックアップされません。対応状況はSERVER-808をフォローして下さい。

例: Single Collectionから標準出力へのダンピング

v.1.7.0+ からはファイルへの出力替わりに標準出力を使用することができます。その際は --out stdout を使用します:

 $ ./mongodump --db blog --collection posts --out - > blogposts.bson 

mongodump はdatabaseのcollectionごとにファイルを作成しますので、1つのcollectionは標準出力に一度にダンプされます。

例: クエリを使用したSingle Collectionのダンピング

-q オプションでJSON形式で記述したクエリが使用できます。次の例は条件:「"created_at"が"2010-12-01"から"2010-12-31"まで」を指定しています。

$ ./mongodump --db blog --collection posts 
-q '{"created_at" : { "$gte" : {"$date" : 1293868800000}, 
"$lt" : {"$date" : 1296460800000} 
} 
}'

mongorestore

mongorestoreによってmongodumpによる出力から復元を行うことができます。indexは復元時に自動で作成されます。mongorestoreはデータの復元時に (fire-and-forget) insert を行います(途中でエラーが出ても最後まで処理を実行します);insertが成功したかどうかはもし復元中のエラーをチェックしたい場合はサーバーのログを確認する必要があります。

options: 
--help              help情報を表示します 
-v [ --verbose ]    より詳細な出力をする場合に使用します(e.g. -vvvvv のようにvを重ねることでより出力レベルが深くなっていきます) 
-h [ --host ]       接続するmongoのhost名を指定します("left,right" for pairs) 
-d [ --db ]         使用するdb名を指定します
-c [ --collection ] 使用するcollection名を指定します(some commands) 
-u [ --username ]   usernameを指定します
-p [ --password ]   passwordを指定します
--dbpath mongodインスタンスに接続してデータを取得する替わりに、直接データファイルからインポートを行う場合はこのオプションでデータファイルのパスを指定します。その場合は、必ずデータがロックされている状態でないといけません。つまりmongodインスタンスがこのデータファイルにアクセスしている状態でこのオプションは使ってはいけません
--directoryperdb    もしdbpathが指定された時、各々のdbを別々のディレクトリに分けたい場合に指定します
--drop              importする前に対象のcollectionをdropします
--objcheck          insertする前にオブジェクトの検証を行います
--filter            insertする前にフィルタリングを実行します
--indexesLast       indexの作成を最後のinsertを待ってから行います(元々indexの順序通りにデータが格納されていない場合に速くなります)
もしあるdatabaseに対してインデックスの作成を行いたく無い場合は、(ただし_idに関するインデックスは必ず作成されます)ダンプしたディレクトリ内の特定のdatabese名のディレクトリの中のsystem.indexes.bsonファイルを事前に削除しておいて下さい。
ダンプしたディレクトリを指定する際には dbpath オプションを使うことになっていますが、mongorestoreにおいてはうまく行かない事例も報告されています。Mongorestore of a db causing me trouble(筆者の環境でもそうでした。)その際には、 dbpath を付けないでディレクトリ名を記述して下さい。
mongorestore --db mydb --drop --dbpath dump/mydb #エラーが出る可能性
#--dbpathを付けないで実行する
mongorestore --db mydb --drop dump/mydb #成功

bsondump

v.1.6 での新機能です

bsonファイルを読み込んでjson/debug出力を行います。

usage: ./bsondump [options] [filename] 
options: 
--help help情報を表示します 
--type json,debugいずれかの出力形式を指定します 

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

IF YOU HAVE A QUESTION, POST IT TO THE USER GROUP.

These pages are fine for comments, but for questions, your best bet will always be the MongoDB User Group.

blog comments powered by Disqus