Docs Menu
Docs Home
/ /
/ / /

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

重要

Flex クラスターで利用できない機能

Flex クラスターは現時点ではこの機能をサポートしていません。詳しくは、Atlas Flex 制限をご覧ください。

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

注意

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

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

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

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

1

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

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

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 クラスターへのデータの移行中に問題が発生した場合は、サポート にお問い合わせください。

戻る

バックアップと復元

項目一覧