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

将数据加载到Atlas Infinite 集群

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

其中每种方法都会占用目标Atlas Infinite集群的写入容量。为了限制对应用程序的影响,请在非系统使用高峰或计划的维护窗口期间运行大量数据加载。

完成以下先决条件:

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

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

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

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

1

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

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

2

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

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

3

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

如果您设立了VPC对等互连,则可以将对等VPC的 CIDR区块或子网,或者对等VPC的安全群组添加到IP访问列表。要学习;了解更多信息,请参阅IP访问列表。

4
  1. 汇编 mongodump 命令。

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

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

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

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

    注意

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

  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 排除Atlas管理的 admin 和 config 数据库。

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

    注意

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

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

    例子

    以下 mongorestore 命令使用 SRV连接字符串连接到Atlas Infinite集群,该字符串包含具有 Atlas admin角色的数据库用户的用户名(myDestinationUsername) 和密码 (myDestinationPassword)。该命令将恢复由mongodump 创建的位于 mongodump.archive 的存档,但不包括 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部署恢复数据。

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

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访问列表中,更新该列表。您可以指定以下任一项:

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

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

6

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

  1. 单击 Drivers(连接)。

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

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

    重要

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

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

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

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

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

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

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

  • 其他接口:要写入少量没有批处理逻辑的文档,请使用 mongosh 中的insertMany() 或 insertOne() 或MongoDB驾驶员,或Atlas用户界面,它会插入您粘贴或键入的 JSON 文档。

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 }
}
] )

默认下,批量写入操作按顺序运行,并在出现第一个错误时停止。要学习;了解如何配置运行顺序,请参阅执行操作。

Atlas Infinite 在公开预览可用性中提供了公开预览限制的完整列表。将数据加载到Atlas Infinite集群时,应用以下限制: