MongoDB提供了 mongoimport 工具来将JSON和逗号分隔值(CSV)文件导入到主数据集中。本指南介绍了如何有效地使用 mongoimport 将数据移入MongoDB 数据库。
开始之前
创建示例文件。
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。
步骤
以下示例展示了如何:
使用文件导入文档
使用 --file 选项指定包含要导入MongoDB集合的数据的文件的位置和名称。
以下示例通过提供文件的路径 --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用户界面。

注意
对于每个导入的文档, 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 选项,mongoimport 将失败并显示错误 cannot decode array into a Document,因为MongoDB文档相当于JSON对象,而不是数组。
注意
您可以将大量作为值存储在文档中,但文档不能是大量。
使用JSON导入MongoDB特定类型
由于MongoDB将数据存储为BSON,因此您必须使用扩展JSON将以JSON形式导入的字段识别为特定的BSON类型。这意味着您可以在以下嵌套结构中提供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用户界面。

将逗号分隔值(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用户界面。

现在,您可以看到 mongoimport 使用您提供的数据类型来存储导入的文件。
有用的命令行工具
您可以将其他命令行程序与 mongoimport 一起使用,以进一步简化数据导入。
JQ
JQ 是JSON数据的处理器。它包含功能强大的筛选和脚本语言,用于筛选、操作和生成JSON数据。您可以使用多级管通过 JQ 将数据通过管道管到 mongoimport。要学习;了解有关如何使用 JQ 的更多信息,请参阅 JQ 手册。
CSVKit
CSVKit 是用于筛选和操作逗号分隔值(CSV)数据的工具集合。CSVKit 工具(例如 csvgrep(根据表达式筛选行)和 csvcut(从逗号分隔值(CSV)输入中删除整列)是在将数据提供给 mongoimport 之前对数据进行切片的有用工具。要学习;了解有关如何使用 CSVKit 的更多信息,请参阅 CSVKit 文档。
了解详情
- 有关可能选项的更多详细信息,请参阅我们的
mongoimport文档。