Docs Menu
Docs Home
/ /
/ / /

Atlas Online アーカイブからの特定のドキュメントの復元

重要

Flex クラスターおよびサーバーレスインスタンスで使用できない機能

Flex クラスターとサーバーレスインスタンスは現時点ではこの機能をサポートしていません。詳しくは、Atlas Flex 制限サーバーレス インスタンスの制限を参照してください。

このページでは、 パイプラインステージを使用して特定のアーカイブ データを復元する方法について説明します。このアプローチでは、特定の基準に基づいてより詳細な復元を実行できます。完全なクラスターを復元する必要がある場合は、「$merge アーカイブ データのバックアップと復元 」で詳細を参照してください。

注意

アーカイブから復元するデータ量に応じて、クラスターが十分にプロビジョニングされていることを確認します。そうしないと、復元中または復元後にスペースが不足実行中リスクがあります。 oplogのサイズ設定に関する追加の技術ガイダンスや、Atlas クラスターのスペースの問題のトラブルシューティングについては、 サポートにお問い合わせください

Project Data Access Adminこの手順では、プロジェクトに対する 以上のアクセス権が必要です。

このアプローチは、多数のパーティションを持つ大規模なデータセット(約 1 TB のデータ)には推奨されません。

特定のアーカイブ データを Atlas クラスターに復元するには、次の手順を実行します。

1

復元したいアーカイブ データを含むコレクションに関連付けられている Atlas Online アーカイブ を一時停止します。

詳細については、「アーカイブの一時停止と再開」を参照してください。

2

Atlas Online Archive に接続するには、{0 接続 を使用する必要があります。Archive Onlystring詳細については、「 Atlas 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")
}

ステージで$merge フィールドとitem source$mergeフィールドに基づいてドキュメントを復元するとします。次のコードサンプルは、 ステージを使用して、その条件に基づいてアーカイブ データを復元する例を示しています。

db.<collection>.aggregate([
{
"$merge": {
"into": {
"atlas": {
"clusterName": "<atlas-cluster-name>",
"db": "<db-name>",
"coll": "<collection-name>"
}
},
"on": [ "item", "source" ],
"whenMatched": "keepExisting",
"whenNotMatched": "insert"
}
}
])

このコードでは、次のロジックを使用します。

  • アーカイブされたドキュメントが、item フィールドと source フィールドの Atlas クラスター上のドキュメントと一致する場合、Atlas クラスター上のドキュメントのコピーがアーカイブ バージョンよりも新しいため、Atlas は既存のドキュメントをクラスターに保持します。

  • アーカイブされたドキュメントがAtlas クラスター内のどのドキュメントとも一致しない場合、Atlas は Atlas クラスター上の指定されたコレクションにドキュメントを挿入します。

Atlas クラスターにデータを復元する場合、アーカイブされたデータに重複する_id フィールドが含まれる場合があります。この例では、$sort ステージの前に_id releasedフィールドと フィールドでソートするための$merge ステージを含めることができ、解決する重複がある場合に Atlas が最新の日付を持つドキュメントを選択するようにします。

次のコードサンプルでは、$sort ステージを追加します。

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"
}
}
], "cursor": { }
}, { "background": true }
)

重複フィールドの解決の詳細については、 $merge に関する考慮事項 を参照してください。

注意

複数のonフィールドがある場合は、 on識別子フィールドに複合一意のインデックスを作成する必要があります。

db.<collection>.createIndex( { item: 1, source: 1 }, { unique: true } )

または、一時コレクションへのマージを、on 識別子フィールドごとに 1 つずつ順番に指定します。次に、クラスターの接続文字列を使用して、一時コレクションのデータをターゲットコレクションにマージします。また、on 識別子フィールドごとにユニークインデックスを作成する必要があります。

フラグをbackground trueに設定することで、集計ステージをバックグラウンドで実行できます。 でこのコマンドを実行するには、mongosh db.runCommandを使用します。

4

Atlas クラスター内のデータを確認し、オンライン アーカイブを削除します。

詳細については、「 Atlas Online Archive の削除」を参照してください。

注意

Atlas クラスターへのデータの移行中に問題が発生した場合は、サポート にお問い合わせください。

戻る

バックアップと復元

項目一覧