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.json 2.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.json 2.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,1 EOF 重要
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 0B 2025-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=Cluster0 2025-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=Cluster0 2025-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=Cluster0 2025-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=Cluster0 2025-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
オプションでそのファイルを点方法です。
@" 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 "@ | Set-Content -Path field_file.txt
echo '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' > field_file.txt
cat << 'EOF' > field_file.txt 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 EOF
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=Cluster0 2025-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.txt
echo '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.txt
cat << 'EOF' > field_file_with_types.txt 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() EOF
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=Cluster0 2025-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
のドキュメントを参照してください。