对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

mongoimport 示例指南

MongoDB提供了 mongoimport 工具来将JSON和逗号分隔值(CSV)文件导入到主数据集中。本指南介绍了如何有效地使用 mongoimport 将数据移入MongoDB 数据库。

  • 创建示例文件。

    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。

以下示例展示了如何:

使用 --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.

要导入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对象,而不是数组。

注意

您可以将大量作为值存储在文档中,但文档不能是大量。

由于MongoDB将数据存储为BSON,因此您必须使用扩展JSON将以JSON形式导入的字段识别为特定的BSON类型。这意味着您可以在以下嵌套结构中提供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用户界面。

从上图可以看出,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用户界面。

现在,您可以看到 mongoimport 使用您提供的数据类型来存储导入的文件。

您可以将其他命令行程序与 mongoimport 一起使用,以进一步简化数据导入。

JQ 是JSON数据的处理器。它包含功能强大的筛选和脚本语言,用于筛选、操作和生成JSON数据。您可以使用多级管通过 JQ 将数据通过管道管到 mongoimport。要学习;了解有关如何使用 JQ 的更多信息,请参阅 JQ 手册。

CSVKit 是用于筛选和操作逗号分隔值(CSV)数据的工具集合。CSVKit 工具(例如 csvgrep(根据表达式筛选行)和 csvcut(从逗号分隔值(CSV)输入中删除整列)是在将数据提供给 mongoimport 之前对数据进行切片的有用工具。要学习;了解有关如何使用 CSVKit 的更多信息,请参阅 CSVKit 文档。

  • 有关可能选项的更多详细信息,请参阅我们的 mongoimport 文档。