恢复存档数据
您可以将存档数据恢复到 Atlas 集群。您可以使用 Atlas Data Federation 为 $merge 管道阶段提供的备用语法将数据移回到同一 Atlas 项目内的相同或不同 Atlas 集群、数据库或集合中。
注意
确保您的集群已针对将从存档中恢复的数据量进行了充分配置,以便在恢复存档数据期间或之后不会运行空间不足的情况。 请联系支持部门,获取有关设置oplog大小或解决Atlas 集群任何空间问题的其他技术指导。
本页介绍如何使用 $merge
管道阶段或MongoDB工具来恢复存档数据。
必需的访问权限
要执行此操作步骤,您必须拥有项目的 Project Data Access Admin
或更高的访问权限。
步骤
如果您的数据集较小,您可以使用$merge
阶段将存档数据移回Atlas 集群。 对于具有大量分区的大型数据集(数据量约为1 TB),不建议使用此方法。
暂停与您想要恢复其存档数据的集合关联的在线存档。
有关更多信息,请参阅暂停和恢复存档。
使用连接字符串连接到 Online Archive。
您必须使用 Archive Only 连接string连接到 Online 存档。 要学习;了解更多信息,请参阅连接到 Online 存档。
使用 将数据从存档移至Atlas$merge
集群。
要了解有关将数据移回 Atlas 集群的 $merge
管道阶段语法和用法的更多信息,请参阅 $merge 管道阶段。
例子
考虑 S3 存档中的以下文档:
{ "_id" : 1, "item": "cucumber", "source": "nepal", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 2, "item": "miso", "source": "canada", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 3, "item": "oyster", "source": "luxembourg", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 4, "item": "mushroom", "source": "ghana", "released": ISODate("2016-05-18T16:00:00Z") }
假设用于将这些文档恢复到 Atlas 集群的 $merge
事务语法在 $merge
阶段根据 item
和 source
字段识别文档。
db.<collection>.aggregate([ { "$merge": { "into": { "atlas": { "clusterName": "<atlas-cluster-name>", "db": "<db-name>", "coll": "<collection-name>" } }, "on": [ "item", "source" ], "whenMatched": "keepExisting", "whenNotMatched": "insert" } } ])
在此示例中,当存档文档在这两个字段上与 Atlas 集群上的文档匹配时,Atlas 会将现有文档保留在集群中,因为 Atlas 集群上的文档副本比存档中的文档副本更新。当存档文档与 Atlas 集群中的任何文档都不匹配时,Atlas 会将文档插入到 Atlas 集群上的指定集合中。
将数据恢复回 Atlas 集群时,存档数据可能具有重复的_id
字段。 对于此示例,我们可以在 阶段之前加入一个$sort
_id
阶段,用于对 和released
$merge
字段进行排序,以确保 Atlas 在有重复项需要解决时选择具有最新日期的文档。
注意
如果有多个on
字段,则必须在on
标识符字段上创建复合唯一索引:
db.<collection>.createIndex( { item: 1, source: 1 }, { unique: true } )
或者,指定按顺序合并到临时集合,每个on
标识符字段一个。 然后,使用集群的 连接string将临时集合中的数据合并到目标集合。 您仍须为每个on
标识符字段创建唯一索引。
通过将background
标志设置为true
,可以在背景运行聚合阶段。 要在mongosh
中运行此命令,请使用db.runCommand
。
db.runCommand( "aggregate": "<collection>", "pipeline": [ { $sort: { "_id": 1, "released": 1, } }, { "$merge": { "into": { "atlas": { "clusterName": "<atlas-cluster-name>", "db": "<db-name>", "coll": "<collection-name>" } }, "on": [ "item", "source" ], "whenMatched": "keepExisting", "whenNotMatched": "insert" } } ], {"background": true} )
要了解有关解决重复字段的更多信息,请参阅 $merge 注意事项。
验证 Atlas 集群中的数据并删除在线存档。
有关详细信息,请参阅删除在线存档。
注意
如果您在将数据迁移回Atlas 集群时运行问题,请联系支持部门。