mongoexportによるMongoDBデータのCSV・JSON出力

mongoexportによるMongoDBデータのCSV・JSON出力 サーバー

MongoDBからデータ出力を行うには、mongoexportを利用します。
この記事では、mongoexportについて解説をしています。

本記事の内容

  • mongoexportとは?
  • mongoexportのインストール
  • mongoexportによるエクスポート

それでは、上記に沿って解説していきます。

mongoexportとは?

mongoexportとは、MongoDB上のデータをエクスポートするコマンドラインツールです。
バックアップではなく、エクスポートという言葉に注意してください。

バックアップなら、復元できるような形式でMongoDBのデータを保存します。
インデックスや制約も含めてです。

それに対して、エクスポートは単純なデータ出力です。
データのみなので、インデックスや制約などのメタ情報は含まれません。

わかりやすく言うと、次のようになります。

MongoDBで同じモノを再現(復元)したいときは、バックアップ。
データベース(MongoDB含め)やソフトウェアでMongoDBのデータを扱いたいときは、エクスポート。

では、mongoexportではどのような形式でデータをエクスポートできるのでしょうか?
mongoexportで出力可能なデータ形式は、以下。

  • JSON
  • CSV

以上、mongoexportの説明でした。
次は、mongoexportのインストールについて説明します。

mongoexportのインストール

mongoexportは、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で似たような感じです。
しかし、それぞれ機能は異なります。

mongoexportは、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

mongoexportのキーワードが、含まれていることを確認できます。
他にも、いろいろな機能を持ったツールがあるということです。

では、mongoexportのバージョンを確認しておきます。

$ mongoexport --version
mongoexport version: 100.3.1
git version: 32632b931f9c41d8314b75ecc88e551b012b1e30
Go version: go1.15.8
   os: linux
   arch: amd64
   compiler: gc

確かに、mongodb-database-toolsのバージョンと同じです。

以上、mongoexportのインストールについて説明しました。
最後に、mongoexportによるエクスポートを行います。

mongoexportによるエクスポート

mongoexportの公式ページ
https://docs.mongodb.com/database-tools/mongoexport/

詳細は、上記ページを参考にしてください。

基本の使い方は、以下。

mongoexport --collection=<coll> <options> <connection-string>

mongoexportは、コレクション単位でのエクスポートとなります。
バックアップではないから、データベース単位にする必要性はないということでしょう。

以下では、これさえ覚えれば何とかなるというコマンドを載せています。

JSON形式のエクスポート

mongoexport --host="localhost" --port=27017 --db="test_database" --collection="test_collection" --type="json" --out="output.json"

CSV形式のエクスポート

mongoexport --host="localhost" --port=27017 --db="test_database" --collection="test_collection" --type="csv" --out="output.csv" --fields="author,text" --noHeaderLine

CSV形式の場合は、「–fields」は必須です。
つまり、出力する列(カラム)を指定する必要があります。

指定しないと、以下のようなエラーとなります。

Failed: CSV mode requires a field list

「–fields」には、カンマ区切りで複数の列を指定可能です。

あと、「–noHeaderLine」は任意です。
ヘッダー(列名)が不要の場合、「–noHeaderLine」を指定します。

まとめ

上記のパターンを覚えておけば、エクスポートで困ることはそれほどないでしょう。
困った場合は、mongoexportの公式ページを見ましょう。

例えば、出力するデータを絞りたいような場合です。
「–query=」を指定することで、データの絞り込みができます。

ただ、個人的には覚えるつもりはありません。
なぜなら、データの絞り込みはインポート先ですべきという考えだからです。

データの出力時点で条件を間違うと、再度条件を変更して出力し直すことになります。
二度手間になり、非効率です。

しかし、元データが大量の場合はこの考えが適用できません。
出力の段階である程度絞り込む必要があるということです。
その場合は、素直にマニュアルを見て頑張ります。

以上、mongoexportによるエクスポートについての説明でした。

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