MongoDBへのデータインポートを行うには、mongoimportを利用します。
この記事では、mongoimportについて解説をしています。
本記事の内容
- mongoimportとは?
- mongoimportのインストール
- mongoimportによるエクスポート
それでは、上記に沿って解説していきます。
mongoimportとは?
mongoimportとは、MongoDBへデータをインポートするコマンドラインツールです。
リストアではなく、インポートという言葉に注意してください。
リストアは、MongoDBでバックアップしたデータをそのまま復元します。
インデックスや制約も含めてです。
それに対して、インポートは単純なデータ入力です。
データのみなので、インデックスや制約などのメタ情報は含まれません。
わかりやすく言うと、次のようになります。
MongoDBで同じモノを再現(復元)したいときは、リストア。
MongoDB以外で出力したデータをMongoDBに入力したいときは、インポート。
例えば、MySQLからMongoDBに移行する場合にインポートを利用します。
もちろん、MongoDB間同士でもインポートは利用できます。
では、mongoimportではどのような形式のデータをインポートできるのでしょうか?
mongoimportで入力可能なデータ形式は、以下。
- JSON
- CSV
- TSV
以上、mongoimportの説明でした。
次は、mongoimportのインストールについて説明します。
mongoimportのインストール
mongoimportは、MongoDB Database Toolsに含まれています。
そして、MongoDB Database ToolsはMongoDB本体と一緒にインストールされます。
いわゆる、クライアントツールと言われるモノです。
そのため、MongoDBをインストール済みなら、何もする必要はありません。
MongoDBのインストールは、次の記事で解説しています。
MongoDB関連のインストール済みパッケージを確認します。
(インストール方法によって「-org」がつかないケースがあります)
$ dpkg -l | grep mongo ii mongodb-database-tools 100.3.1 amd64 mongodb-database-tools package provides tools for working with the MongoDB server: ii mongodb-org 4.4.6 amd64 MongoDB open source document-oriented database system (metapackage) ii mongodb-org-database-tools-extra 4.4.6 amd64 Extra MongoDB database tools ii mongodb-org-mongos 4.4.6 amd64 MongoDB sharded cluster query router ii mongodb-org-server 4.4.6 amd64 MongoDB database server ii mongodb-org-shell 4.4.6 amd64 MongoDB shell client ii mongodb-org-tools 4.4.6 amd64 MongoDB tools
mongodb-database-toolsは、mongodb-org-toolsと勘違いされがちです。
しかし、それぞれ機能は異なります。
mongoimportは、mongodb-database-toolsに含まれています。
mongodb-database-toolsパッケージを確認します。
$ sudo apt show mongodb-database-tools Package: mongodb-database-tools Version: 100.3.1 Priority: optional Section: database Maintainer: MongoDB Connectors Team <database-tools-packaging@mongodb.com> Installed-Size: 不明 Provides: mongodb-database-tools Depends: libc6, libgssapi-krb5-2, libkrb5-3, libk5crypto3, libcomerr2, libkrb5support0, libkeyutils1 Conflicts: mongodb-database-tools Breaks: mongodb-org-tools (<= 4.3.2), mongodb-org-tools-unstable (<= 4.3.2), mongodb-enterprise-tools (<= 4.3.2), mongodb-enterprise-tools-unstable (<= 4.3.2) Replaces: mongodb-database-tools (<= 100.3.1), mongodb-org-tools (<= 4.3.2), mongodb-org-tools-unstable (<= 4.3.2), mongodb-enterprise-tools (<= 4.3.2), mongodb-enterprise-tools-unstable (<= 4.3.2) Homepage: http://www.mongodb.com Download-Size: 52.7 MB APT-Manual-Installed: no APT-Sources: https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4/multiverse amd64 Packages Description: mongodb-database-tools package provides tools for working with the MongoDB server: *bsondump - display BSON files in a human-readable format *mongoimport - Convert data from JSON, TSV or CSV and insert them into a collection *mongoexport - Write an existing collection to CSV or JSON format *mongodump/mongorestore - Dump MongoDB backups to disk in .BSON format, or restore them to a live database *mongostat - Monitor live MongoDB servers, replica sets, or sharded clusters *mongofiles - Read, write, delete, or update files in GridFS (see: http://docs.mongodb.org/manual/core/gridfs/) *mongotop - Monitor read/write activity on a mongo server
mongoimportのキーワードが、含まれていることを確認できます。
他にも、いろいろな機能を持ったツールがあるということです。
$ mongoimport --version mongoimport version: 100.3.1 git version: 32632b931f9c41d8314b75ecc88e551b012b1e30 Go version: go1.15.8 os: linux arch: amd64 compiler: gc
確かに、mongodb-database-toolsのバージョンと同じです。
以上、mongoimportのインストールについて説明しました。
最後に、mongoimportによるインポートを行います。
mongoimportによるインポート
mongoimportの公式ページ
https://docs.mongodb.com/database-tools/mongoimport/
詳細は、上記ページを参考にしてください。
基本の使い方は、以下。
mongoimport <options> <connection-string> <file>
mongoimportは、コレクション単位でのインポートとなります。
バックアップ・リストアではないから、データベース単位にする必要性はないということでしょう。
以下では、これさえ覚えれば何とかなるというコマンドを載せています。
JSON形式のインポート
mongoimport --host="localhost" --port=27017 --db="test_database" --collection="test_import" --type="json" --file="import.json" --jsonArray
「–jsonArray」を指定しないと、エラーで怒られます。
CSV形式のインポート
CSVにおけるヘッダーの有無により、指定するオプションが異なります。
CSVにヘッダーがある場合
header_true.csv
col_1,col_2,col_3 1,a,test1 2,b,test2 3,c,test3
ヘッダーを列名としてそのまま登録する場合、「–headerline」を指定します。
1行目を列名と見なし、2行目からをデータとしてインポートすることになります。
mongoimport --host="localhost" --port=27017 --db="test_database" --collection="test_import" --type="csv" --file="header_true.csv" --headerline
MongoDB上では、次のように登録されています。
CSVにヘッダーがない場合
header_false.csv
1,a,test1 2,b,test2 3,c,test3
「–fields」で列名を指定します。
mongoimport --host="localhost" --port=27017 --db="test_database" --collection="test_import_csv_2" --type="csv" --file="header_false.csv" --fields="num,alphabet,text"
MongoDB上では、次のように登録されています。
まとめ
上記のパターンを覚えておけば、インポートで困ることはそれほどないでしょう。
困った場合は、mongoimportの公式ページを見ましょう。
公式ページでは、多くのオプションが説明されています。
例えば、「–columnsHaveTypes」というオプションがあります。
このオプションを使えば、型指定することができます。
便利ですが、よく考えてみてください。
MySQLやPostgreSQLなどでインポートする際に、型指定などしたことがありますか?
ありませんよね。
これって、インポート先のテーブルを事前に作成するからです。
そのため、インポート時には型指定をする必要がありません。
しかし、MongoDBはインポートと同時にコレクション(テーブル)を作成できます。
だからこそ、「–columnsHaveTypes」が存在しているのでしょう。
それなら、MongoDBでもインポート事前にコレクションを作成しておけばいいだけです。
もちろん、ちゃんと型を指定して。
そうすれば、「–columnsHaveTypes」を使うことはありません。
そして、「–columnsHaveTypes」を覚える必要性もなくなります。
何でもかんでも覚えようとしたら、記憶のキャパが追いつきません。
コマンドのオプションなんて、調べたら本当にキリがありませんからね。
以上、mongoimportによるインポートについて説明しました。