mongoimportによるMongoDBへのデータインポート

mongoimportによるMongoDBへのデータインポート サーバー

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によるインポートについて説明しました。

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