Docs 菜单
Docs 主页
/
MongoDB 阿特拉斯
/ /

恢复存档数据

在此页面上

  • 必需的访问权限
  • 步骤

重要

无服务器实例中的不可用功能

无服务器实例目前不支持此功能。要了解更多信息,请参阅无服务器实例限制。

您可以将存档数据恢复到 Atlas 集群。您可以使用 Atlas Data Federation 为 $merge 管道阶段提供的备用语法将数据移回到同一 Atlas 项目内的相同或不同 Atlas 集群、数据库或集合中。

注意

确保您的集群已针对将从存档中恢复的数据量进行了充分配置,以便在恢复存档数据期间或之后不会出现空间不足的情况。请联系支持部门,获取有关设置 oplog 大小或解决 Atlas 集群任何空间问题的其他技术指导。

本页介绍如何使用 $merge管道阶段或 MongoDB 工具来恢复存档数据。

要执行此操作步骤,您必须拥有项目的 Project Data Access Admin 或更高的访问权限。

如果数据集较小,您可以使用$merge阶段将存档数据移回 Atlas 集群。对于具有大量分区的大型数据集(数据量约为1 TB),不建议使用此方法。

1

有关更多信息,请参阅暂停和恢复存档

2

必须使用 Archive Only连接字符串连接到 Online Archive。要了解更多信息,请参阅连接到 Online Archive。

3

要了解有关将数据移回 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 阶段根据 itemsource 字段识别文档。

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 注意事项。

4

有关详细信息,请参阅删除在线存档

注意

如果您在将数据迁移回 Atlas 集群时遇到问题,请联系支持部门。

后退

备份 Online Archive