MongoDB データのインポート

MongoDBBeginner
オンラインで実践に進む

はじめに

この実験では、MongoDB データベースにデータをインポートするための必須スキルを習得します。JSON と CSV という 2 つの一般的なデータ形式を扱います。mongoimport コマンドラインツールを使用して、ファイルから MongoDB コレクションにデータをロードします。この実験では、データのインポート、インポート時のデータ型の指定、クエリと mongoexport ツールを使用したデータのロードの確認について説明します。

JSON ファイルからのデータインポート

最初のステップとして、JSON ファイルから MongoDB コレクションにデータをインポートします。JSON (JavaScript Object Notation) は MongoDB のネイティブ形式であるため、インポートプロセスは簡単です。この目的のために設計されたコマンドラインツールである mongoimport ユーティリティを使用します。

~/project ディレクトリに books.json という名前のサンプルファイルが用意されています。まず、ターミナルからその内容を確認してください。

cat ~/project/books.json

以下のような、JSON ドキュメントの配列が表示されるはずです。

[
  {
    "_id": 1,
    "title": "MongoDB Basics",
    "author": "Jane Smith",
    "year": 2023,
    "tags": ["mongodb", "database", "nosql"]
  },
  {
    "_id": 2,
    "title": "Python Programming",
    "author": "John Doe",
    "year": 2022,
    "tags": ["python", "programming"]
  },
  {
    "_id": 3,
    "title": "Data Science Handbook",
    "author": "Alice Johnson",
    "year": 2021,
    "tags": ["data science", "python", "machine learning"]
  }
]

次に、このデータを library_db という名前の新しいデータベースと books という名前のコレクションにインポートします。

mongoimport --db library_db --collection books --file ~/project/books.json --jsonArray

コマンドオプションの内訳を見てみましょう。

  • --db library_db: 対象のデータベースを指定します。
  • --collection books: データベース内の対象コレクションを指定します。
  • --file ~/project/books.json: 入力ファイルのパスを指定します。
  • --jsonArray: ファイルが単一の JSON 配列を含んでおり、各要素が挿入されるドキュメントであることを mongoimport に伝えます。

インポートの進行状況と完了を示す出力が表示されます。

2025-08-27T15:10:40.411+0800    connected to: mongodb://localhost/
2025-08-27T15:10:40.417+0800    3 document(s) imported successfully. 0 document(s) failed to import.

データが正しくインポートされたことを確認するために、MongoDB Shell である mongosh を使用して MongoDB に接続します。

mongosh

シェルに入ったら、library_db データベースに切り替えます。

use library_db

次に、books コレクション内のドキュメント数をカウントして、すべての 3 つのレコードがインポートされたことを確認します。

db.books.countDocuments()

出力は 3 になるはずです。インポートされたドキュメントの 1 つを表示して、その構造を確認することもできます。

db.books.findOne()

これにより、コレクションの最初のドキュメントが表示されます。最後に、MongoDB Shell を終了してターミナルに戻ります。

exit

CSV ファイルからのデータインポート

次に、CSV (Comma-Separated Values) ファイルからデータをインポートします。CSV は表形式データの一般的な形式であり、mongoimport はこれを簡単に MongoDB ドキュメントに変換できます。

library_members.csv という名前のサンプル CSV ファイルが用意されています。その内容を確認してください。

cat ~/project/library_members.csv

ファイルにはヘッダー行と 3 つのデータ行が含まれています。

name,age,membership_status
John Doe,35,active
Jane Smith,28,active
Mike Johnson,42,expired

次に、mongoimport を使用して、このデータを同じ library_db データベース内の members という名前の新しいコレクションにロードします。

mongoimport --db library_db --collection members --type csv --file ~/project/library_members.csv --headerline

CSV インポートに使用される新しいオプションは次のとおりです。

  • --type csv: 入力ファイルの形式が CSV であることを指定します。
  • --headerline: ファイルの最初の行をドキュメントのフィールド名として使用するように mongoimport に指示します。

出力は、インポートの成功を確認します。

2025-08-27T15:11:33.553+0800    connected to: mongodb://localhost/
2025-08-27T15:11:33.558+0800    3 document(s) imported successfully. 0 document(s) failed to import.

インポートを確認しましょう。MongoDB Shell に接続し、members コレクションを確認します。mongosh を起動する際にデータベースを直接指定することで、手順を省略できます。

mongosh library_db

次に、members コレクション内のドキュメント数をカウントします。

db.members.countDocuments()

結果は 3 になるはずです。次に、ドキュメントの 1 つを調べて、mongoimport が CSV 行を BSON ドキュメントにどのように変換したかを確認します。

db.members.findOne()

以下のようなドキュメントが表示されます。デフォルトでは、age を含むすべての値が文字列としてインポートされていることに注意してください。

{
  _id: ObjectId("..."),
  name: 'John Doe',
  age: '35',
  membership_status: 'active'
}

次のステップでデータ型を処理する方法を学びます。それまでは、シェルを終了します。

exit

CSV インポート時のデータ型処理

CSV ファイルからのインポート時、mongoimport はデフォルトですべての値を文字列として扱います。これは、数値または日付ベースの操作を実行する必要がある場合に問題となる可能性があります。このステップでは、CSV データをインポートしてから MongoDB でデータ型を変換する方法を学びます。

library_members.csv データを typed_members という名前の新しいコレクションに再インポートし、その後 age フィールドを整数に変換します。

まず、フィールド名を明示的に定義するため、ヘッダーのない CSV ファイルを作成します。

tail -n +2 ~/project/library_members.csv > ~/project/library_members_no_header.csv

次に、明示的なフィールド名でデータをインポートします。

mongoimport --db library_db --collection typed_members --type csv --file ~/project/library_members_no_header.csv --fields "name,age,membership_status"

インポート後、MongoDB の update 操作を使用して age フィールドを文字列から整数に変換する必要があります。

mongosh library_db --eval "db.typed_members.updateMany({}, [{ \$set: { age: { \$toInt: \"\$age\" } } }])"

このコマンドは、update 操作内で MongoDB の集計パイプラインを使用し、$toInt オペレーターを使用してすべての age の値を文字列から整数に変換します。

次に、mongosh に接続し、typed_members コレクションのデータ型を確認して結果を検証しましょう。

mongosh library_db

まず、コレクション内のドキュメントを 1 つ見つけて、変換されたデータを確認します。

db.typed_members.findOne()

出力は、age フィールドが数値として表示されるはずです。

{
  _id: ObjectId("..."),
  name: 'Jane Smith',
  age: 28,
  membership_status: 'active'
}

mongosh 内で JavaScript の typeof オペレーターを使用して、age フィールドの型を明示的に確認できます。

typeof db.typed_members.findOne().age

出力は number になるはずで、データ型の変換が成功したことを確認できます。これにより、30 歳を超えるすべてのメンバーを見つけるなど、数値クエリを実行できます。

db.typed_members.find({ age: { $gt: 30 } })

このクエリは期待どおりに機能し、2 つのドキュメントを返します。シェルを終了して、次のステップに進みます。

exit

クエリとエクスポートによるデータ検証

あらゆるデータインポートプロセスの最終ステップは、徹底的な検証です。これには、ドキュメント数の確認だけでなく、クエリを実行してデータをサンプリングし、その整合性を確保することが含まれます。さらに、外部ファイルにデータをエクスポートして、さらなる分析を行うこともできます。

まず、mongosh でデータベースに接続します。

mongosh library_db

データベース内のすべてのコレクションをリストして、これまでの作業結果を確認できます。

show collections

booksmemberstyped_members が表示されるはずです。次に、データを検証するためにいくつかのクエリを実行しましょう。books コレクションについては、「python」タグを持つすべての書籍を検索します。

db.books.find({ tags: "python" })

このクエリは、配列フィールド内での検索を示しています。2 冊の本が返されるはずです。typed_members コレクションについては、「active」のメンバーシップステータスを持つすべてのメンバーを検索します。

db.typed_members.find({ membership_status: "active" })

これにより、2 人のメンバーが返されるはずです。これらの簡単なクエリは、データが期待どおりに構造化されていることを確認するのに役立ちます。

もう 1 つ強力な検証ツールは mongoexport です。これは mongoimport の逆の操作を行います。コレクションをファイルにエクスポートします。books コレクションを新しい JSON ファイルにエクスポートしましょう。まずシェルを終了します。

exit

次に、ターミナルから mongoexport コマンドを実行します。

mongoexport --db library_db --collection books --out ~/project/exported_books.json

--out フラグは、出力ファイルのパスを指定します。このコマンドは、プロジェクトディレクトリに exported_books.json という名前のファイルを作成します。その内容を表示して、エクスポートを確認できます。

cat ~/project/exported_books.json

出力ファイルの各行は、コレクションからの自己完結型の JSON ドキュメントです。このファイルは、バックアップ、移行、または他のツールでの分析に使用できます。

まとめ

この実験では、mongoimport ユーティリティを使用して、JSON ファイルと CSV ファイルの両方から MongoDB にデータをインポートする方法を学びました。JSON 配列をコレクションにインポートする練習をし、mongosh を使用して結果を検証しました。次に、CSV ファイルからデータをインポートしました。最初はデフォルトの文字列型で、次に数値のようなフィールドのデータ型を指定しました。最後に、mongosh でクエリを実行すること、および mongoexport を使用してコレクションをファイルにエクスポートすることによって、インポートしたデータの整合性を検証する方法を学びました。これらは、あらゆる MongoDB プロジェクトでデータを管理するための基本的なスキルです。