Docker内に構築したMongoDBに対してjsonファイルからデータをインポートします。その後、インポートしたデータをエクスポートして取り出します。
環境は以下で構築したものを使用します。
インポートデータをMongoDBコンテナにコピー
# インポートするデータは駅.JPの駅データをJSON形式に変換したものを使用します。
$ ls /share
station20200619free.json
# コマンド例:docker cp <コピー元> <コンテナID>:<コピー先>
$ docker cp /share/station20200619free.json 9ec0efe07dfe:/data/
# MongoDBコンテナに入る
$ doker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
005abcf8b589 mongo-express "tini -- /docker-ent…" 3 days ago Up 3 minutes 0.0.0.0:8081->8081/tcp mongo-compose_mongo-express_1
9ec0efe07dfe mongo "docker-entrypoint.s…" 3 days ago Up 3 minutes 0.0.0.0:27017->27017/tcp mongo-compose_mongo_1
# ファイルがコンテナ内にコピーされている
$ docker exec -it 9ec0efe07dfe /bin/bash
[root@9ec0efe07dfe:/data] ls /data
station20200619free.json
MongoDBにデータをインポート
# mongoimportコマンドでデータをインポート
[root@9ec0efe07dfe:/data]mongoimport --authenticationDatabase admin -u root -p mongo --db ekidata --collection station --drop --file station20200619free.json
2020-07-16T12:15:50.248+0000 connected to: mongodb://localhost/
2020-07-16T12:15:50.249+0000 dropping: ekidata.stationr
2020-07-16T12:15:52.174+0000 Failed: cannot decode boolean into a slice
2020-07-16T12:15:52.174+0000 10000 document(s) imported successfully. 0 document(s) failed to import.
インポートデータを参照
mongo-expressでデータを参照する。
データが正常に投入されている。
登録したデータをエクスポート
# データをエクスポート
[root@9ec0efe07dfe:/data]mongoexport --authenticationDatabase admin -u root -p mongo --db ekidata --collection station --out /data/station.json
2020-07-16T12:35:13.247+0000 connected to: mongodb://localhost/
2020-07-16T12:35:14.241+0000 exported 10000 records
# データを確認
[root@9ec0efe07dfe:/data]ls /data
station.json station20200619free.json
エクスポートデータをホストOSにコピー
# ホストでコピーを実行
$ docker cp 9ec0efe07dfe:/data/station.json ./
$ ls
station.json
正常にファイルがエクスポートされました。
以上でDocker内のMongoDBにデータをインポート&エクスポートは完了です。
30代のWEB系企業エンジニアです。毎回同じようなことを検索してしまうので、自分の備忘録的に書いています。サイトのデザインはQiita(https://qiita.com)さんに寄せています。