MongoDB importとexport

スポンサーリンク

MongoDBサーバのimport操作とexport操作をまとめます。CLIを使用する場合は、mongoimportとmongoexportを使用します。また、MongoDB CompassのようなGUIツールもimport機能とexport機能を備えています。

前提

公式ドキュメント

参考になる公式ドキュメントを以下に示します。

動作確認済環境

  • Rocky Linux 8.6
  • MongoDB Server 6.0.2

CLI操作

接続文字列

MongoDBへ接続する場合は、MongoDBへの接続情報をURIで指定します。認証が不要な場合の書式が以下の通りです。

mongodb://<MongoDBサーバ IPアドレス>:<MongoDBサーバ ポート番号>/<データベース名>

認証が必要な場合は以下のように指定します。

mongodb://<ユーザ名>:<パスワード>@<MongoDBサーバ IPアドレス>:<MongoDBサーバ ポート番号>/<データベース名>

mongoimport

コマンドラインでMongoDBサーバへのインポートをする場合は、mongoimportというツールを使用します。RPMパッケージmongodb-orgをインストールすると、自動的にmongoimportもインストールされます。

jsonインポート

jsonファイルをインポートする場合の操作例を示します。まずはテスト用のJSONファイルを作成します。なお、mongoimportが読み込むファイルはUTF-8である事を前提としている事に注意ください。

cat << 'EOF' > import.json
{ "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" }
{ "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" }
{ "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" }
{ "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" }
{ "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" }
{ "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
EOF

mongoimportを用いたインポートをする操作例は以下の通りです。引数の意味は直感的に分かると思いますので説明を省略します(直感に頼りたくない場合は「mongoimport」を参照ください)。

mongoimport \
  --type=json \
  --file=import.json \
  --collection=inventory \
  mongodb://172.16.1.90:27017/test

想定通りのデータがimportされた事を確認します。

[root@linux090 ~]# mongosh --quiet
[direct: mongos] test> db.inventory.find();
[
  {
    _id: ObjectId("63581f0d18e6eea873a2b750"),
    item: 'journal',
    qty: 25,
    size: { h: 14, w: 21, uom: 'cm' },
    status: 'A'
  },
  {
    _id: ObjectId("63581f0d18e6eea873a2b754"),
    item: 'postcard',
    qty: 45,
    size: { h: 10, w: 15.25, uom: 'cm' },
    status: 'A'
  },
  {
    _id: ObjectId("63581f0d18e6eea873a2b751"),
    item: 'notebook',
    qty: 50,
    size: { h: 8.5, w: 11, uom: 'in' },
    status: 'A'
  },
  {
    _id: ObjectId("63581f0d18e6eea873a2b752"),
    item: 'paper',
    qty: 100,
    size: { h: 8.5, w: 11, uom: 'in' },
    status: 'D'
  },
  {
    _id: ObjectId("63581f0d18e6eea873a2b753"),
    item: 'planner',
    qty: 75,
    size: { h: 22.85, w: 30, uom: 'cm' },
    status: 'D'
  }
]
[direct: mongos] test> 

csvインポート

mongodbはcsvインポートも可能です。ただし、csvはフィールド名を含まないフォーマットですので、フィールド名指定の配慮が必要です。

mongoimportコマンドは以下のようなオプションを指定する事でフィールド名を定義できます。

フィールド名を定義したファイル名を指定する

オプション 意味
–fields コマンドラインでフィールド名を指定する
–fieldFile
–headerline csvファイルの先頭行にフィールド名を指定する

以下にオプションheaderlineにフィールド名を指定する操作例を示します。以下にテストデータの例を挙げます。

cat << 'EOF' > import.csv
_id,prefecture,description
11,埼玉,未入力
12,千葉,未入力
13,東京,未入力
14,神奈川,未入力
EOF

mongodbがインポートできるcsvはRFC4180に基づいたフォーマットを許容します。RFC4180とは、誤解を恐れずにざっくりとした言い方をすれば、Excelのcsvデータのように改行を許容するフォーマットです。以下にRFC4180の例を紹介します。

cat << 'EOF' > import.csv
_id,prefecture,description
11,埼玉,"未開の地。
通るには通行手形が必要"
12,千葉,未入力
13,東京,未入力
14,神奈川,未入力
EOF

mongoimportを用いたインポートをする操作例は以下の通りです。

mongoimport \
  --type=csv \
  --file=import.csv \
  --headerline \
  --collection=prefecture \
  mongodb://172.16.1.90:27017/test

想定通りのデータがimportされた事を確認します。

[root@linux090 ~]# mongosh --quiet
[direct: mongos] test> db.prefecture.find()
[
  { _id: 11, prefecture: '埼玉', description: '未開の地。\n通るには通行手形が必要' },
  { _id: 12, prefecture: '千葉', description: '未入力' },
  { _id: 13, prefecture: '東京', description: '未入力' },
  { _id: 14, prefecture: '神奈川', description: '未入力' }
]
[direct: mongos] test> 

mongoexport

コマンドラインでMongoDBサーバからのエクスポートをする場合は、mongoexportというツールを使用します。RPMパッケージmongodb-orgをインストールすると、自動的にmongoexportもインストールされます。

jsonエクスポート

mongoexportに与える引数は、mongoimportとほぼ同じです。以下のような操作でtestデータベースのinventoryコレクションをエクスポートする事ができます。

mongoexport \
  --type=json \
  --collection=inventory \
  mongodb://172.16.1.90:27017/test

操作のログは以下の通りです。エクスポートされたデータ以外にもログも表示されています。

[root@linux090 ~]# mongoexport \
>   --type=json \
>   --collection=inventory \
>   mongodb://172.16.1.90:27017/test
2022-10-27T22:58:39.988+0900  connected to: mongodb://172.16.1.90:27017/test
{"_id":{"$oid":"63581f0d18e6eea873a2b751"},"item":"notebook","qty":50,"size":{"h":8.5,"w":11,"uom":"in"},"status":"A"}
{"_id":{"$oid":"63581f0d18e6eea873a2b752"},"item":"paper","qty":100,"size":{"h":8.5,"w":11,"uom":"in"},"status":"D"}
{"_id":{"$oid":"63581f0d18e6eea873a2b753"},"item":"planner","qty":75,"size":{"h":22.85,"w":30,"uom":"cm"},"status":"D"}
{"_id":{"$oid":"63581f0d18e6eea873a2b750"},"item":"journal","qty":25,"size":{"h":14,"w":21,"uom":"cm"},"status":"A"}
{"_id":{"$oid":"63581f0d18e6eea873a2b754"},"item":"postcard","qty":45,"size":{"h":10,"w":15.25,"uom":"cm"},"status":"A"}
2022-10-27T22:58:40.028+0900  exported 5 records
[root@linux090 ~]# 

この出力はデータが標準出力でログがエラー出力です。ですので、以下のように標準出力のみを抽出するようにすれば、エクスポートされたデータをファイルに記録する事ができます。

[root@linux090 ~]# mongoexport \
>   --type=json \
>   --collection=inventory \
>   mongodb://172.16.1.90:27017/test > export.json
2022-10-27T23:00:48.391+0900  connected to: mongodb://172.16.1.90:27017/test
2022-10-27T23:00:48.412+0900  exported 5 records
[root@linux090 ~]# cat export.json 
{"_id":{"$oid":"63581f0d18e6eea873a2b751"},"item":"notebook","qty":50,"size":{"h":8.5,"w":11,"uom":"in"},"status":"A"}
{"_id":{"$oid":"63581f0d18e6eea873a2b752"},"item":"paper","qty":100,"size":{"h":8.5,"w":11,"uom":"in"},"status":"D"}
{"_id":{"$oid":"63581f0d18e6eea873a2b753"},"item":"planner","qty":75,"size":{"h":22.85,"w":30,"uom":"cm"},"status":"D"}
{"_id":{"$oid":"63581f0d18e6eea873a2b750"},"item":"journal","qty":25,"size":{"h":14,"w":21,"uom":"cm"},"status":"A"}
{"_id":{"$oid":"63581f0d18e6eea873a2b754"},"item":"postcard","qty":45,"size":{"h":10,"w":15.25,"uom":"cm"},"status":"A"}
[root@linux090 ~]# 

mongoexportはqueryオプションを指定する事で対象を絞り込む事ができます。

$ltをダブルクォート等で囲む必要があるなど、操作には癖があります。

mongoexport \
  --type=json \
  --collection=inventory \
  --query='{ "qty" : { "$lt" : 50 } }' \
  mongodb://172.16.1.90:27017/test

操作ログは以下の通りです。

[root@linux090 ~]# mongoexport \
>   --type=json \
>   --collection=inventory \
>   --query='{ "qty" : { "$lt" : 50 } }' \
>   mongodb://172.16.1.90:27017/test
2022-10-27T23:09:55.538+0900  connected to: mongodb://172.16.1.90:27017/test
{"_id":{"$oid":"63581f0d18e6eea873a2b750"},"item":"journal","qty":25,"size":{"h":14,"w":21,"uom":"cm"},"status":"A"}
{"_id":{"$oid":"63581f0d18e6eea873a2b754"},"item":"postcard","qty":45,"size":{"h":10,"w":15.25,"uom":"cm"},"status":"A"}
2022-10-27T23:09:55.557+0900  exported 2 records
[root@linux090 ~]# 

csvエクスポート

csvエクスポートの操作例は以下の通りです。csvでエクスポートする場合は、fieldsオプションでフィールド名の指定が必要です。

mongoexport \
  --type=csv \
  --collection=prefecture \
  --fields='_id,prefecture,description' \
  mongodb://172.16.1.90:27017/test

操作ログは以下の通りです。

[root@linux090 ~]# mongoexport \
>   --type=csv \
>   --collection=prefecture \
>   --fields='_id,prefecture,description' \
>   mongodb://172.16.1.90:27017/test
2022-10-27T23:14:27.763+0900  connected to: mongodb://172.16.1.90:27017/test
_id,prefecture,description
11,埼玉,"未開の地。
通るには通行手形が必要"
12,千葉,未入力
13,東京,未入力
14,神奈川,未入力
2022-10-27T23:14:27.780+0900  exported 4 records
[root@linux090 ~]# 

GUI(MongoDB Compass)操作

import

jsonインポート

まずはテスト用のデータを作成します。以下の内容が記述されたファイルを任意のファイル名(例:import.json)で保存します。

{ "type": "home", "number": "212-555-1234" }
{ "type": "cell", "number": "646-555-4567" }
{ "type": "office", "number": "202-555-0182"}

「操作対象のデータベース名(test)」「Create Collection」の順に画面遷移し、コレクション名入力後に「Create Collection」を押下します。

MongoDB json import操作 01

操作対象のcollection画面で、「ADD DATA」「Import File」の順に押下します。

MongoDB json import操作 02

「Select File」欄でインポート対象のjsonファイルを指定し、「Select Input File Type」は「JSON」とします。以上の操作完了後、「IMPORT」を押下します。

MongoDB json import操作 03

想定通りのデータがインポートされた事を確認します。

MongoDB json import操作 04

csvインポート

まずはテスト用のデータを作成します。以下の内容が記述されたファイルを任意のファイル名(例:import.csv)で保存します。先頭行は必ずフィールド名にしなければならない制約がある事に注意ください。

_id,ename,job,mgr,hiredate,sal,comm,deptno
7369,SMITH,CLERK,7902,17-DEC-80,800,,20
7499,ALLEN,SALESMAN,7698,20-FEB-81,1600,300,30
7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30
7566,JONES,MANAGER,7839,02-APR-81,2975,,20
7654,MARTIN,SALESMAN,7698,28-SEP-81,1250,1400,30
7698,BLAKE,MANAGER,7839,01-MAY-81,2850,,30
7782,CLARK,MANAGER,7839,09-JUN-81,2450,,10
7788,SCOTT,ANALYST,7566,19-APR-87,3000,,20
7839,KING,PRESIDENT,,17-NOV-81,5000,,10
7844,TURNER,SALESMAN,7698,08-SEP-81,1500,0,30
7876,ADAMS,CLERK,7788,23-MAY-87,1100,,20
7900,JAMES,CLERK,7698,03-DEC-81,950,,30
7902,FORD,ANALYST,7566,03-DEC-81,3000,,20
7934,MILLER,CLERK,7782,23-JAN-82,1300,,10

「操作対象のデータベース名(test)」「Create Collection」の順に画面遷移し、コレクション名入力後に「Create Collection」を押下します。

MongoDB csv import操作 01

操作対象のcollection画面で、「ADD DATA」「Import File」の順に押下します。

MongoDB csv import操作 02

「Select File」欄でインポート対象のcsvファイルを指定し、「Select Input File Type」は「CSV」とします。

コマンドラインツールのmongoimportと異なり、MongoDB Compassは各フィールドのデータ型の指定が可能です。必要に応じてデータ型を変更します。以下スクリーンショットの例では、sal(給与)フィールドをstring型からDecimal128型に変更しています。

以上の操作完了後、「IMPORT」を押下します。

MongoDB csv import操作 03

想定通りのデータがインポートされた事を確認します。

MongoDB csv import操作 04

export

jsonエクスポート

「データベース名(例:test)」「コレクション名(例:employee)」の順に押下し、コレクション画面へ遷移します。

もし、全量ではなく一部データをエクスポートしたい場合は、FILTER欄に以下の例のような検索条件を入力します。

{sal:{$gt:2500}}

以上の操作完了後、「Collection」「Export Collection」の順に押下します。

MongoDB json export 操作 01

「Export query with filter」を選んだ場合は、前述のFILTER欄に基づいたデータが出力されます。一方、「Export Full Collection」を選んだ場合は、全量が出力されます。選択完了後、「SELECT FIELDS」を押下します。

MongoDB json export 操作 02

「Select Fields」欄で出力するフィールドを絞り込む事ができます。絞り込み完了後、「SELECT OUTPUT」を押下します。

MongoDB json export 操作 03

「Select Input File Type」欄は「JSON」とし、「Output」に出力先のファイル名を指定します。。以上の操作完了後、「EXPORT」を押下します。

MongoDB json export 操作 04

想定通りのデータがエクスポートされた事を確認します。

MongoDB json export 操作 05

csvエクスポート

「データベース名(例:test)」「コレクション名(例:employee)」の順に押下し、コレクション画面へ遷移します。

もし、全量ではなく一部データをエクスポートしたい場合は、FILTER欄に以下の例のような検索条件を入力します。

{sal:{$gt:2500}}

以上の操作完了後、「Collection」「Export Collection」の順に押下します。

MongoDB csv export 操作 01

「Export query with filter」を選んだ場合は、前述のFILTER欄に基づいたデータが出力されます。一方、「Export Full Collection」を選んだ場合は、全量が出力されます。選択完了後、「SELECT FIELDS」を押下します。

MongoDB csv export 操作 02

「Select Fields」欄で出力するフィールドを絞り込む事ができます。絞り込み完了後、「SELECT OUTPUT」を押下します。

MongoDB csv export 操作 03

「Select Input File Type」欄は「CSV」とし、「Output」に出力先のファイル名を指定します。。以上の操作完了後、「EXPORT」を押下します。

MongoDB csv export 操作 04

想定通りのデータがエクスポートされた事を確認します。

MongoDB csv export 操作 05

タイトルとURLをコピーしました