AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

mongoimport サンプル ガイド

MongoDB にはJSONと CSV ファイルをメインのデータセットにインポートするための mongoimport ツールが用意されています。このガイドでは、mongoimport を使用してデータをMongoDBデータベースに効果的に移動する方法について説明します。

  • Database Toolsインストール ガイド に従って mongoimport をインストールします。

  • 例ファイルを作成します。

    1
    mkdir test-datasets cd test-datasets
    2
    @' { "tripduration": 602, "starttime": "2019-12-01 00:00:05.5640", "stoptime": "2019-12-01 00:10:07.8180", "start station id": 3382, "start station name": "Carroll St & Smith St", "start station latitude": 40.680611, "start station longitude": -73.99475825, "end station id": 3304, "end station name": "6 Ave & 9 St", "end station latitude": 40.668127, "end station longitude": -73.98377641, "bikeid": 41932, "usertype": "Subscriber", "birth year": 1970, "gender": "male" }'@ | Set-Content -Path ride_01.json @' { "tripduration": 1206, "starttime": "2019-12-01 00:00:10.9630", "stoptime": "2019-12-01 00:20:17.8820", "start station id": 362, "start station name": "Broadway & W 37 St", "start station latitude": 40.75172632, "start station longitude": -73.98753523, "end station id": 500, "end station name": "Broadway & W 51 St", "end station latitude": 40.76228826, "end station longitude": -73.98336183, "bikeid": 18869, "usertype": "Customer", "birth year": 1999, "gender": "male" }'@ | Set-Content -Path ride_02.json @' { "tripduration": 723, "starttime": "2019-12-01 00:00:11.8180", "stoptime": "2019-12-01 00:12:14.8310", "start station id": 146, "start station name": "Hudson St & Reade St", "start station latitude": 40.71625008, "start station longitude": -74.0091059, "end station id": 238, "end station name": "Bank St & Washington St", "end station latitude": 40.7361967, "end station longitude": -74.00859207, "bikeid": 15334, "usertype": "Subscriber", "birth year": 1997, "gender": "male" }'@ | Set-Content -Path ride_03.json @' [ { "tripduration": 602, "starttime": "2019-12-01 00:00:05.5640", "stoptime": "2019-12-01 00:10:07.8180", "start station id": 3382, "start station name": "Carroll St & Smith St", "start station latitude": 40.680611, "start station longitude": -73.99475825, "end station id": 3304, "end station name": "6 Ave & 9 St", "end station latitude": 40.668127, "end station longitude": -73.98377641, "bikeid": 41932, "usertype": "Subscriber", "birth year": 1970, "gender": "male" }, { "tripduration": 1206, "starttime": "2019-12-01 00:00:10.9630", "stoptime": "2019-12-01 00:20:17.8820", "start station id": 362, "start station name": "Broadway & W 37 St", "start station latitude": 40.75172632, "start station longitude": -73.98753523, "end station id": 500, "end station name": "Broadway & W 51 St", "end station latitude": 40.76228826, "end station longitude": -73.98336183, "bikeid": 18869, "usertype": "Customer", "birth year": 1999, "gender": "male" }, { "tripduration": 723, "starttime": "2019-12-01 00:00:11.8180", "stoptime": "2019-12-01 00:12:14.8310", "start station id": 146, "start station name": "Hudson St & Reade St", "start station latitude": 40.71625008, "start station longitude": -74.0091059, "end station id": 238, "end station name": "Bank St & Washington St", "end station latitude": 40.7361967, "end station longitude": -74.00859207, "bikeid": 15334, "usertype": "Subscriber", "birth year": 1997, "gender": "male" } ]'@ | Set-Content -Path rides.json @' 602,"2019-12-01 00:00:05.5640","2019-12-01 00:10:07.8180",3382,"Carroll St & Smith St",40.680611,-73.99475825,3304,"6 Ave & 9 St",40.668127,-73.98377641,41932,"Subscriber",1970,1 1206,"2019-12-01 00:00:10.9630","2019-12-01 00:20:17.8820",362,"Broadway & W 37 St",40.75172632,-73.98753523,500,"Broadway & W 51 St",40.76228826,-73.98336183,18869,"Customer",1999,1 723,"2019-12-01 00:00:11.8180","2019-12-01 00:12:14.8310",146,"Hudson St & Reade St",40.71625008,-74.0091059,238,"Bank St & Washington St",40.7361967,-74.00859207,15334,"Subscriber",1997,1'@ | Set-Content -Path rides_no_header.json
  • MongoDB接続文字列を見つけます。

    重要

    MongoDB Atlas の接続文字列は次の例のようになります。

    mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority

mongoimport は、 JSON、CSV、 TSVファイルからMongoDBコレクションにデータをインポートするためのコマンドライン ツールです。mongoimport は、 JSON操作用の JQ、CSV 操作用の CSVKit、インターネット上のサーバーからデータファイルを動的にダウンロードするための curl など、他のコマンドライン ツールと組み合わせることができます。

JSONは、 MongoDBドキュメントと同様に 階層データ形式であり、エンコードされるデータの型について明示的です。

CSV (およびTSV )データは表形式で、各行は個別のドキュメントとしてMongoDBにインポートされます。つまり、これらの形式では、 MongoDBドキュメントと同じ方法で階層データをサポートできません。CSV データをMongoDBにインポートする際、特定のフィールドのタイプを識別するときに、mongoimport は有用な選択をしようとします。この動作は、フラグまたは 型の指定でオーバーライドできます。

MongoDB Atlas接続文字列を使用して、mongoimport を testデータベースと test-collectionコレクションに接続します。

mongoimport --uri 'mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority' \ --db=test \ --collection=test-collection

データベースコレクションへの正常な接続は次のようになります。

2025-07-14T10:22:58.317-0400 connected to: mongodb+srv://cluster0.zoikgns.mongodb.net/2025-07-14T10:23:01.318-0400 test.test-collection 0B2025-07-14T10:23:04.318-0400 test.test-collection 0B...

データベースコレクションに正常に接続したら、mongoimport を使用してMongoDBにデータをインポートする方法を、例に従ってください。

次の例は、次の方法を示しています。

MongoDBコレクションにインポートするデータを含むファイルの場所と名前を指定するには、 --file オプションを使用します。

次の例では、ファイルのパス --file=ride_01.json を指定して、ride_01.jsonファイルを testデータベース内の新しいコレクション(test-collection)にインポートします。

mongoimport --uri 'mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority' \ --db=test \ --collection=test-collection \ --file=ride_01.json

正常にインポートされると、次のようになります。

2025-07-14T11:47:01.303-0400 connected to: mongodb+srv://[**REDACTED**]@cluster0.zoikgns.mongodb.net/?retryWrites=true&w=majority&appName=Cluster02025-07-14T11:47:01.391-0400 1 document(s) imported successfully. 0 document(s) failed to import.

データが正常にインポートされたかどうかを確認するには、Atlas UIを使用します。

注意

MongoDB はインポートされたドキュメントごとに、必要な一意の_id 値を生成します。

ファイルを指定しない場合、mongoimport は標準入力(例:stdin)。次の例では、複数のドキュメントを mongoimport にパイプしてインポートし、stdin からデータを読み取る方法を示しています。

echo "{\"bikeid\":\"1234\"}\n{\"bikeid\":\"5678\"}" | mongoimport --uri 'mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority' \ --db=test \ --collection=test-collection-stdin

正常にインポートされると、次のようになります。

2025-07-14T11:08:08.884-0600 connected to: mongodb+srv://[**REDACTED**]@cluster0.zoikgns.mongodb.net/?retryWrites=true&w=majority&appName=Cluster02025-07-14T11:08:09.095-0600 2 document(s) imported successfully. 0 document(s) failed to import.

cat などの別のツールから複数のJSONドキュメントをパイプ、mongoimport で複数のファイルをインポートできます。インポート用のJSONファイルが含まれているディレクトリから、次のコマンドを実行してドキュメントをインポートできます。

cat *_*.json | mongoimport --uri 'mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority' \ --db=test \ --collection=test-collection-many

正常にインポートされると、次のようになります。

2025-07-21T16:48:23.519-0400 connected to: mongodb+srv://[**REDACTED**]@cluster0.zoikgns.mongodb.net/?retryWrites=true&w=majority&appName=Cluster02025-07-21T16:48:23.627-0400 3 document(s) imported successfully. 0 document(s) failed to import.

ドキュメントのJSON配列をインポートするには、--jsonArray オプションを使用してデータの形式を指定できます。ファイルまたは標準入力にすることができるデータソース を個別に指定します。次の例では、単一のJSON配列を含む rides.jsonファイルをインポートしています。

mongoimport --uri 'mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority' \ --db=test \ --collection=test-collection-array \ --file=rides.json \ --jsonArray

正常にインポートされると、次のようになります。

2025-07-14T11:48:10.829-0400 connected to: mongodb+srv://[**REDACTED**]@cluster0.zoikgns.mongodb.net/?retryWrites=true&w=majority&appName=Cluster02025-07-14T11:48:10.899-0400 3 document(s) imported successfully. 0 document(s) failed to import.

--jsonArray オプションを追加しない場合、 MongoDBドキュメントは配列ではなくJSONオブジェクトに相当するため、mongoimport はエラー cannot decode array into a Document で失敗します。

注意

配列をドキュメントに値として保存できますが 、ドキュメントを配列にすることはできません。

MongoDB はBSONとしてデータを保存するため、 JSONとしてインポートされたフィールドを特定のBSON types として認識するには、拡張JSONを使用する必要があります。つまり、次のネストされた構造でMongoDB が最初に string として認識するフィールドを提供すると、 MongoDB はそれを date 型として認識できるようになります。

"starttime": { "$date": "2019-12-01T00:00:05.5640Z"}

既存のデータを変換するには、JQ のセクションを参照してください。

インポートする CSV またはTSVファイルがある場合は、それぞれ--type=csv または--type=tsv を使用して、mongoimport に期待される形式を指示します。

CSV またはTSVファイルにヘッダー行がある場合は、--headerline mongoimportオプションを使用して、最初の行をドキュメントとしてインポートしないでください。

CSV とTSVデータにはタイプ情報が含まれていないため、mongoimport を呼び出すときにフィールドタイプを指定することで、この問題を解決できます。mongoimport にタイプ情報を提供する最初の方法は、--fields オプションを使用してコマンドライン上のフィールド名を一覧表示することです。

mongoimport --uri 'mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority' \ --db=test \ --collection=test-field-file \ --file=rides_no_header.csv \ --type=csv \ --fields="tripduration","starttime","stoptime","start station id","start station name","start station latitude","start station longitude","end station id","end station name","end station latitude","end station longitude","bikeid","usertype","birth year","gender"

mongoimport にタイプ情報を提供する別の方法は、フィールド名を field_file.txt などのファイルに配置し、--fieldFile オプションでそのファイルを点方法です。

@"tripdurationstarttimestoptimestart station idstart station namestart station latitudestart station longitudeend station idend station nameend station latitudeend station longitudebikeidusertypebirth yeargender"@ | Set-Content -Path field_file.txt
mongoimport --uri 'mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority' \ --db=test \ --collection=test-field-file \ --file=rides_no_header.csv \ --type=csv \ --fieldFile=field_file.txt

--fields オプションと --fieldFile オプションの正常なインポートは次のようになります。

2025-07-14T11:48:10.829-0400 connected to: mongodb+srv://[**REDACTED**]@cluster0.zoikgns.mongodb.net/?retryWrites=true&w=majority&appName=Cluster02025-07-14T11:48:10.899-0400 3 document(s) imported successfully. 0 document(s) failed to import.

データが正常にインポートされたかどうかを確認するには、Atlas UIを使用します。

上記では、mongoimport がデータ型の決定を自動的に行うことができます。代わりに、一部またはすべてのフィールドのタイプを指定するには、--columnsHaveTypes オプションを使用するか、--fieldFile オプションで使用するファイルにタイプを追加します。

@"tripduration.auto()starttime.date(2006-01-02 15:04:05)stoptime.date(2006-01-02 15:04:05)start station id.auto()start station name.auto()start station latitude.auto()start station longitude.auto()end station id.auto()end station name.auto()end station latitude.auto()end station longitude.auto()bikeid.auto()usertype.auto()birth year.auto()gender.auto()"@ | Set-Content -Path field_file_with_types.txt
mongoimport --uri 'mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority' \ --db=test \ --collection=test-field-file \ --file=test-datasets/rides_no_header.csv \ --type=csv \ --fieldFile=field_file_with_types.txt

正常にインポートされると、次のようになります。

2025-07-14T11:48:10.829-0400 connected to: mongodb+srv://[**REDACTED**]@cluster0.zoikgns.mongodb.net/?retryWrites=true&w=majority&appName=Cluster02025-07-14T11:48:10.899-0400 3 document(s) imported successfully. 0 document(s) failed to import.

データが正常にインポートされたかどうかを確認するには、Atlas UIを使用します。

これで、mongoimport がインポートされたファイル を保存するために指定したデータ型を使用していることがわかります。

データのインポートをさらに効率化するには、mongoimport と並行して他のコマンドライン プログラムを使用します。

JQ はJSONデータのプロセッサです。JSONデータのフィルタリング、操作、生成のための強力なフィルタリングとスクリプト言語が組み込まれています。マルチステージパイプを使用して、JQ 経由でデータを mongoimport にパイプことができます。 JQ の使用方法の詳細については、JQ マニュアルを参照してください。

CSVKit は、CSV データをフィルタリングおよび操作するためのツールのコレクションです。式に基づいて行をフィルタリングする csvgrep や、CSV 入力から列全体を削除する csvcut などの CSVKit ツールは、mongoimport に提供する前にデータをスケーリングするのに便利なツールです。CSVKit の使用方法の詳細については、CSVKit ドキュメント を参照してください。

  • 利用可能なオプションの詳細については、 mongoimport のドキュメントを参照してください。