MongoDB にはJSONと CSV ファイルをメインのデータセットにインポートするための mongoimport ツールが用意されています。このガイドでは、mongoimport を使用してデータをMongoDBデータベースに効果的に移動する方法について説明します。
始める前に
Database Toolsインストール ガイド に従って
mongoimportをインストールします。例ファイルを作成します。
2.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" }'@ | 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.json2.json例 ファイルの作成echo '{ "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"}' > ride_01.json echo '{ "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"}' > ride_02.json echo '{ "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"}' > ride_03.json echo '[ { "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" }]' > rides.json echo '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' > rides_no_header.json2.json例 ファイルの作成cat << 'EOF' > ride_01.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" }EOF cat << 'EOF' > ride_02.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" }EOF cat << 'EOF' > ride_03.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" }EOF cat << 'EOF' > rides.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" } ]EOF cat << 'EOF' > rides_no_header.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,1EOF重要
MongoDB Atlas の接続文字列は次の例のようになります。
mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@cluster0.example.mongodb.net/?retryWrites=true&w=majority
mongoimport を使い始める
mongoimport は、 JSON、CSV、 TSVファイルからMongoDBコレクションにデータをインポートするためのコマンドライン ツールです。mongoimport は、 JSON操作用の JQ、CSV 操作用の CSVKit、インターネット上のサーバーからデータファイルを動的にダウンロードするための curl など、他のコマンドライン ツールと組み合わせることができます。
ソース データ形式の選択
JSONは、 MongoDBドキュメントと同様に 階層データ形式であり、エンコードされるデータの型について明示的です。
CSV (およびTSV )データは表形式で、各行は個別のドキュメントとしてMongoDBにインポートされます。つまり、これらの形式では、 MongoDBドキュメントと同じ方法で階層データをサポートできません。CSV データをMongoDBにインポートする際、特定のフィールドのタイプを識別するときに、mongoimport は有用な選択をしようとします。この動作は、フラグまたは 型の指定でオーバーライドできます。
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.Import a JSON Array
ドキュメントの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 で失敗します。
注意
配列をドキュメントに値として保存できますが 、ドキュメントを配列にすることはできません。
JSONによるMongoDB固有のタイプのインポート
MongoDB はBSONとしてデータを保存するため、 JSONとしてインポートされたフィールドを特定のBSON types として認識するには、拡張JSONを使用する必要があります。つまり、次のネストされた構造でMongoDB が最初に string として認識するフィールドを提供すると、 MongoDB はそれを date 型として認識できるようになります。
"starttime": { "$date": "2019-12-01T00:00:05.5640Z"}既存のデータを変換するには、JQ のセクションを参照してください。
指定されたフィールドタイプを使用してコレクションに CSV またはTSVをインポートする
インポートする 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.txtecho 'tripdurationstarttimestoptimestart station idstart station namestart station latitudestart station longitudeend station idend station nameend station latitudeend station longitudebikeidusertypebirth yeargender' > field_file.txtcat << 'EOF' > field_file.txttripdurationstarttimestoptimestart station idstart station namestart station latitudestart station longitudeend station idend station nameend station latitudeend station longitudebikeidusertypebirth yeargenderEOFmongoimport --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を使用します。

指定されたフィールドとデータ型を使用してコレクションに CSV またはTSVをインポート
上記では、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.txtecho '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()' > field_file_with_types.txtcat << 'EOF' > field_file_with_types.txttripduration.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()EOFmongoimport --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
JQ はJSONデータのプロセッサです。JSONデータのフィルタリング、操作、生成のための強力なフィルタリングとスクリプト言語が組み込まれています。マルチステージパイプを使用して、JQ 経由でデータを mongoimport にパイプことができます。 JQ の使用方法の詳細については、JQ マニュアルを参照してください。
CSVKit
CSVKit は、CSV データをフィルタリングおよび操作するためのツールのコレクションです。式に基づいて行をフィルタリングする csvgrep や、CSV 入力から列全体を削除する csvcut などの CSVKit ツールは、mongoimport に提供する前にデータをスケーリングするのに便利なツールです。CSVKit の使用方法の詳細については、CSVKit ドキュメント を参照してください。
詳細
- 利用可能なオプションの詳細については、
mongoimportのドキュメントを参照してください。