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

将数据加载到 Atlas Infinite 集群

要将您自己的数据加载到 Atlas Infinite 集群中,请使用以下方法之一:

  • mongodump 和 mongorestore:mongodump 从现有的 MongoDB 独立运行的实例或副本集(包括 Atlas Core 集群)创建数据的二进制导出,然后 mongorestore 将数据加载到 Atlas Infinite 集群中。当源数据位于 MongoDB 部署中时,请使用此方法。要了解如何操作,请参阅 从 MongoDB 部署恢复数据。

  • mongoimport: mongoimport 将文档从 JSON 或 CSV 文件加载到 Atlas Infinite 集群中。当源数据位于 MongoDB 外部的文件中时,请使用此方法。该文件可以来自 mongoexport 或第三方导出工具。要了解具体方法,请参阅 从 JSON 或 CSV 文件导入数据。

  • 批量写入操作:MongoDB 数据库方法将一批处理的文档写入 Atlas Infinite 集群。当您自行从应用程序、mongosh、Atlas 用户界面或其他界面生成或转换文档时,请使用此方法。要了解具体方法,请参阅 写入您生成的数据。

这些方法中的每一种都会消耗目标 Atlas Infinite 集群上的写入容量。为了限制对应用程序的影响,请在系统使用率较低时或在计划的维护窗口期间运行大数据负载。

完成以下先决条件:

mongodump 创建现有 MongoDB 独立运行的实例或副本集的二进制导出,mongorestore 将该导出加载到 Atlas Infinite 集群中。导出内容包括源部署中的数据、元数据和索引。有关从现有 MongoDB 分片集群复制数据的指导,请参阅 请求支持。

您还可以使用此过程将数据从 Atlas Core 上的 Free 集群或 Flex 集群迁移到 Atlas Infinite 上的专用集群。若要就地扩展 Free 集群或 Flex 集群而不是迁移数据,请参阅将 Free 或 Flex 集群扩展为专用集群。

此过程需要停机。停止对源部署的写入,运行 mongodump 和 mongorestore,然后将您的应用程序切换到 Atlas Infinite 集群。

在运行此过程之前,请考虑以下行为:

  • 数据一致性:为避免数据丢失,请在运行 mongodump 之前暂停对源部署的写入。如果您从 从节点(secondarymongodump node from replica set) 运行 ,请暂停写入,然后等待从节点(secondary node from replica set)赶上主节点 (primary node in the replica set),然后再开始转储。

  • 用户和角色:Atlas 托管数据库用户,因此 mongorestore 无法将现有的数据库用户或角色迁移到目标集群。在目标 Atlas Infinite 集群中创建应用程序所需的数据库用户。要了解更多信息,请参阅配置数据库用户。

  • 排除的命名空间:转储中的 admin 和 config 目录保存着 mongorestore 无法添加到 Atlas Infinite 集群的用户信息,因此,该过程排除 admin.* 和 config.*。

  • 托管资源:mongodump 在具有源部署网络访问权限的托管上运行,而 mongorestore 在具有存档文件访问权限和目标部署网络访问权限的托管上运行。这两种工具都会占用托管上的 CPU 和内存,这可能会影响该托管的性能。

1

如果源部署强制执行身份验证,则 mongodump 必须以能够读取您迁移的每个数据库的数据库用户身份进行身份验证。admin 数据库上的 backup 角色授予这些权限。

如果您的源部署中不存在此类用户,请创建一个。要了解如何创建和管理数据库用户,请参阅您的部署类型对应的以下页面:

2

mongorestore 必须以能够写入您迁移的每个数据库的数据库用户身份进行身份验证。目标 Atlas Infinite 集群上的 Atlas admin 角色授予这些权限。

如果您的目标 Atlas Infinite 集群中不存在此类用户,请创建一个。如需了解如何在 Atlas 中创建和管理数据库用户,请参阅“配置数据库用户”。

3

确保运行 mongodump 和 mongorestore 的托管能够访问这两个部署:

  • 将托管添加到包含目标 Atlas Infinite 集群的项目 IP 访问列表中。要了解如何将托管添加到 IP 访问列表,请参阅配置 IP 访问列表条目。

  • 如果您的源部署是不同项目中的 Atlas Core 集群,请也将该托管添加到该项目的 IP 访问列表中。如果您的源部署是自管理的,请配置其防火墙以接受来自托管的连接。要了解更多信息,请参阅 网络和配置强化。

如果设置 VPC 对等互连,可以将对等方的 VPC CIDR 区块或子网,或对等方 VPC 的安全组添加到 IP 访问列表中。要了解更多信息,请参阅 IP 访问列表。

4
  1. 汇编 mongodump 命令。

    以下 mongodump 命令模板使用其连接字符串连接到源副本集或独立运行的实例集群,并将转储的存档输出到文件。

    将模板复制到您喜爱的文本编辑器中,并将 <connectionString> 占位符替换为源部署的连接字符串,将 <fileName> 替换为要创建的存档文件的名称。

    mongodump --uri "<connectionString>" --archive=<fileName>.archive

    要学习如何为部署源构建连接字符串,请参阅 连接字符串。

    注意

    如果在 Ubuntu 18.04上使用mongodump或mongorestore ,则在使用带有--uri选项的SRV 连接字符串(采用mongodb+srv://形式)时,您可能会遇到cannot unmarshal DNS错误消息。 如果是这样,请改用以下选项之一:

    • 带有非 SRV 连接string的 --uri 选项(采用 mongodb:// 形式)

    • --host 选项指定直接连接的主机

  2. 在可以访问源部署的托管上,从终端或命令提示符运行已完成的命令。

    例子

    以下 mongodump 命令使用 SRV 连接字符串连接到源 Atlas Core 集群,该字符串包含在 admin 数据库上具有 backup 角色的数据库用户的用户名 (mySourceUsername) 和密码 (mySourcePassword)。该命令将转储的存档输出到当前工作目录中名为 mongodump.archive 的文件。

    mongodump --uri "mongodb+srv://mySourceUsername:mySourcePassword@cluster0.example.mongodb.net" \ --archive="mongodump.archive"
5
  1. 汇编 mongorestore 命令。

    以下 mongorestore 命令模板使用其连接字符串连接到目标 Atlas Infinite 集群,并恢复由 mongodump 创建的存档。它使用 --nsExclude 排除 admin 和 config 数据库,这些数据库由 Atlas 托管。

    将模板复制到您首选的文本编辑器中,并将以下占位符替换为适当的值:

    • <connectionString>: 将其替换为用于您的目标 Atlas Infinite 集群的 SRV 连接字符串。要检索或构建用于目标集群的连接字符串,请参阅 连接字符串。

      在连接字符串中包含具有 Atlas admin 角色的数据库用户的用户名和密码。

    • <filePath>: 将其替换为由 mongodump 创建的存档文件的路径。

    注意

    如果用户名或密码包含以下字符,则必须使用百分号编码:对这些字符进行转换:

    $ : / ? # [ ] @
    mongorestore --uri "<connectionString>" \ --archive="<filePath>" \ --nsExclude "admin.*" \ --nsExclude "config.*"
  2. 在有权访问由 mongodump 创建的存档文件的托管上,从终端或命令提示符运行已完成的命令。

    例子

    以下 mongorestore 命令使用 SRV 连接字符串连接到 Atlas Infinite 集群。该连接字符串包含具有 Atlas admin 角色的数据库用户的用户名 (myDestinationUsername) 和密码 (myDestinationPassword)。该命令恢复位于 mongodump.archive 的存档,该存档由 mongodump 创建,不包含 admin 和 config 数据库。

    mongorestore --uri "mongodb+srv://myDestinationUsername:myDestinationPassword@cluster0.example.mongodb.net" \ --archive="mongodump.archive" \ --nsExclude "admin.*" \ --nsExclude "config.*"
6

迁移完成后,连接到您的 Atlas Infinite 集群并验证数据是否已成功迁移。您可以运行查询来检查目标集群中是否存在您的集合和文档。

7

验证迁移后,更新您的应用程序以连接到 Atlas Infinite 集群,而不是源部署。确保您使用正确的连接字符串和凭证连接到 Atlas Infinite 集群。

mongoimport 读取 JSON 或 CSV 文件,并将每条记录插入到 Atlas Infinite 集群中的集合中。该文件可以来自第三方导出工具。要将数据从 MongoDB 部署恢复到 Atlas Infinite 集群,请参阅 从 MongoDB 部署恢复数据。

在运行此过程之前,请考虑以下行为:

  • Extended JSON:mongoimport 对某些 BSON types 使用严格模式表示形式。

  • 仅限文档:与 mongorestore 不同,mongoimport 仅加载文档,而不加载集合选项或索引定义。导入完成后,在目标 Atlas Infinite 集群上创建索引。

  • 托管资源:mongoimport 在托管您的文件的托管上运行,并使用该托管上的 CPU 和内存。

  • 其他界面: 要在没有命令行的情况下加载文件,请使用 MongoDB Compass,它可以导入 JSON 和 CSV 文件,或使用 用户界面 Atlas,它可以插入您粘贴或输入的 JSON 文档。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Database & Network Access。

完成上述步骤后,将显示数据库和网络访问页面。

2

要运行 mongoimport 以便向 Atlas 集群写入数据,您必须指定对要导入数据的数据库具有读写权限的数据库用户。示例,具有Atlas admin角色的用户提供这些权限。

如果不存在该用户,则创建该用户:

  1. 如果尚未显示,请单击 Database Users 标签页。

  2. 单击 Add New Database User(添加新的数据库用户)。

  3. 添加 Atlas admin 用户。

3
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。

  3. 在侧边栏中,单击 Database 标题下的 Clusters。

会显示集群页面。

4

单击要将数据迁移到 Atlas 集群的 Connect。

5

如果要运行 mongoimport 的主机不在 IP Access List(IP 访问列表)中,请更新该列表。您可以指定以下任一项:

  • mongoimport 将运行的服务器的公共 IP 地址,或者

  • 如果已为 VPC 对等互连进行设置,则为对等方的 VPC CIDR 区块(或子网)或对等方 VPC 的安全组(如果将 AWS 选作云提供商)。

6

您可以使用 Atlas 集群的连接字符串 URI 连接到 Atlas 集群。在连接对话框中执行以下步骤:

  1. 单击 Drivers(连接)。

  2. 复制在第 1 步中找到的连接字符串。

  3. 将 PASSWORD 替换为 root 用户的密码,并将 DATABASE 替换为您要连接的数据库的名称。

    重要

    您必须对所提供的 <PASSWORD> 中的 @ 字符的任何实例进行转义。例如,p@ssword 应为 p%40ssword。

此连接字符串在 --uri 选项中指定为 mongoimport。

使用 --host 时,如果 Atlas 集群是副本集,您还必须检索副本集名称。例如:

myAtlasRS/atlas-host1:27017,atlas-host2:27017,atlas-host3:27017
7

批量写入操作会在单个请求中向 Atlas Infinite 集群发送多次写入,从而减少网络往返次数并提高写入吞吐量。选择此方法可将您生成的文档写入 Atlas Infinite 集群,而不是从现有部署或文件中复制数据。

在运行此过程之前,请考虑以下行为:

  • 批量写入行为:您在批量写入请求中指定的写入操作和选项决定了 MongoDB 如何对写入操作进行排序、处理错误以及报告请求结果。要了解这些选择如何影响批量写入行为,请参阅 bulkWrite() 参考页面。

  • 其他接口:若要写入少量文档且无需批处理逻辑,请使用 insertMany() 或 insertOne()(来自 mongosh 或 MongoDB 驱动程序),或者使用 Atlas 用户界面,该界面可插入您粘贴或输入的 JSON 个文档。

1

要在此过程中运行批量写入操作,请使用 mongosh 连接到您的集群。要了解如何操作,请参阅 连接到 Atlas 集群。

您还可以通过 MongoDB 驱动程序的应用程序代码、Atlas 用户界面或连接到集群的任何其他界面运行批量写入操作。要了解每个界面中的等效操作,请参阅 批量写入操作。

2

要写入单个集合,请运行 bulkWrite()。要了解有关写入操作类型和批量写入选项的更多信息,请参阅 bulkWrite()。

示例,以下命令将两个文档插入到 inventory 集合中:

db.inventory.bulkWrite( [ { insertOne: { document: { _id: ObjectId("68b1c2d3e4f5a6b7c8d9e0f1"), item: "notebook", qty: 50 } } }, { insertOne: { document: { _id: ObjectId("68b1c2d3e4f5a6b7c8d9e0f2"), item: "pencil", qty: 100 } } }] )

要在一个请求中写入多个集合或数据库,请运行 bulkWrite() 并为每个操作指定命名空间。示例,以下命令将一个文档插入到 sales.inventory 集合中,并将一个文档插入到 supplies.inventory 集合中:

db.getMongo().bulkWrite( [ { namespace: "sales.inventory", name: "insertOne", document: { item: "notebook", qty: 50 } }, { namespace: "supplies.inventory", name: "insertOne", document: { item: "pencil", qty: 100 } }] )

默认情况下,批量写入操作会按顺序运行,并在遇到第一个错误时停止。要了解如何配置运行顺序,请参阅 操作执行。

3

查看操作返回的计数,并确认每个目标集合中的文档计数。要了解更多信息,请参阅输出。

要了解如何处理批量写入操作的错误,请参阅 错误处理。

Atlas Infinite 的完整公共预览版限制列表请参阅公共预览版可用性。将数据加载到 Atlas Infinite 集群时,存在以下限制:

  • 无 oplog 重放:Atlas Infinite 不支持 oplog 重放。不要将 mongodump --oplog 选项或 mongorestore --oplogReplay 选项与 Atlas Infinite 集群一起使用。

  • Queryable Encryption 和客户端字段级加密:您不能将 mongodump 或 mongorestore 与使用 Queryable Encryption 或 客户端字段级加密 的集合一起使用。

  • 跨版本实时迁移和恢复:Atlas Infinite 不支持 Atlas Core 集群和 Atlas Infinite 集群之间的实时迁移或备份和恢复。两种部署选项之间的架构差异使快照和实时迁移不兼容。