MongoDBでサンプルDBを作る

学習用のMongoDBのサンプルDBを作成した話。MongoDBにおける、データのインポート/エクスポートの方法と合わせて確認します。

環境

  • MongoDB Community Edition v4.2.7 (Standalone)

サンプルとなるデータセット

MongoDBの公式で公開してくれていました。

Example with zip Code Data

データはこんな感じです。アメリカの郵便番号ごとの、緯度・軽度や人口についてのデータセットになっています。より詳細なデータモデルは公式サイトにて。

{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" }
{ "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51564999999999, 42.377017 ], "pop" : 36963, "state" : "MA" }
{ "_id" : "01005", "city" : "BARRE", "loc" : [ -72.10835400000001, 42.409698 ], "pop" : 4546, "state" : "MA" }
{ "_id" : "01007", "city" : "BELCHERTOWN", "loc" : [ -72.41095300000001, 42.275103 ], "pop" : 10579, "state" : "MA" }
{ "_id" : "01008", "city" : "BLANDFORD", "loc" : [ -72.936114, 42.182949 ], "pop" : 1240, "state" : "MA" }
{ "_id" : "01010", "city" : "BRIMFIELD", "loc" : [ -72.188455, 42.116543 ], "pop" : 3706, "state" : "MA" }
{ "_id" : "01011", "city" : "CHESTER", "loc" : [ -72.988761, 42.279421 ], "pop" : 1688, "state" : "MA" }

データのインポート

上記のデータセットをMongoDBのdatabaseにインポートします。インポートには mongoimport というツールを利用します。MongoDBインストール時に、こいつも一緒にインストールされている筈です。

データセットをダウンロードして、mongoimportを実行します。インポート先のDB名、コレクション名、インポートファイル名等を指定しています。オプションの詳細はマニュアルにて。

$ wget http://media.mongodb.org/zips.json
$ mongoimport --port 27017 -u root -p password --authenticationDatabase=admin --db=sample --collection=zips --file=zips.json
2020-06-09T22:02:11.310+0000    connected to: mongodb://localhost:27017/
2020-06-09T22:02:12.199+0000    29353 document(s) imported successfully. 0 document(s) failed to import.

mongoimport

検索してみます。

> use sample
> db.zips.find(
... { pop: { $gte: 100000 } }
... ).limit(1)
{ "_id" : "10021", "city" : "NEW YORK", "loc" : [ -73.958805, 40.768476 ], "pop" : 106564, "state" : "NY" }

データのエクスポート

エクスポートするには mongoexport というツールを利用します。その他、バイナリ形式でエクスポートする方法として mongodump というツールもあるようです。

mongoexportの利用方法は、mondoimportと同じです。オプションの詳細はマニュアルにて。

$ mongoexport --port 27017 -u root -p password --authenticationDatabase=admin --db=sample --collection=zips --out=export.json
2020-06-09T22:48:59.322+0000    connected to: mongodb://localhost:27017/
2020-06-09T22:48:59.774+0000    exported 29353 records
$ head export.json
{"_id":"01001","city":"AGAWAM","loc":[-72.622739,42.070206],"pop":15338,"state":"MA"}
{"_id":"01002","city":"CUSHMAN","loc":[-72.51565,42.377017],"pop":36963,"state":"MA"}
{"_id":"01005","city":"BARRE","loc":[-72.108354,42.409698],"pop":4546,"state":"MA"}
{"_id":"01007","city":"BELCHERTOWN","loc":[-72.410953,42.275103],"pop":10579,"state":"MA"}

mongoexport


マニュアルにて、バックアップにはmongodumpとmongorestore(取得したdumpをリストアしてくれるもの)を利用するように注意書きありました。

Avoid using mongoimport and mongoexport for full instance production backups. They do not reliably preserve all rich BSON data types, because JSON can only represent a subset of the types supported by BSON. Use mongodump and mongorestore as described in MongoDB Backup Methods for this kind of functionality.

mongoexport type-fidelity