중요
Flex 클러스터 및 서버리스 인스턴스에서 사용할 수 없는 기능입니다.
현재 Flex 클러스터 및 서버리스 인스턴스는 이 기능 지원 하지 않습니다. 자세히 학습 Atlas Flex 제한 사항 및 서버리스 인스턴스 제한을 참조하세요.
이 페이지에서는 파이프라인 단계를 사용하여 보관된 데이터를 $merge 복원 방법을 설명합니다.
참고
필요한 액세스 권한
Project Data Access Admin 이 절차를 수행하려면 프로젝트 에 대한 이상의 액세스 필요합니다.
고려 사항
이 접근 방식은 파티션 수가 많은 대규모 데이터 세트(약 1TB 데이터)에는 권장되지 않습니다.
절차
보관된 데이터를 Atlas cluster 로 복원 다음 단계를 수행하세요.
복원 하려는 보관된 데이터가 포함된 컬렉션 과 연결된 Online 보관 일시 중지합니다.
자세한 내용은 보관 일시 중지 및 다시 시작을 참조하세요.
연결 문자열 사용하여 Online 보관 에 연결합니다.
Online 보관 에 연결하려면 Archive Only 연결 string 을 사용해야 합니다. 학습 내용은 Connect to Online 보관(온라인 아카이브에 연결하기)를 참조하세요.
단계를 사용하여 아카이브에서 Atlas cluster 로 데이터를 $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") }
단계에서 및 필드를 기반으로 문서를 복원 item source $merge 한다고 가정해 보겠습니다. 다음 코드 샘플 단계를 사용하여 $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 cluster 에 있는 문서 와 일치하는 경우, Atlas Atlas cluster 의 문서 사본이 보관된 버전보다 최신이기 때문에 Atlas 기존 문서 를 클러스터 에 유지합니다.보관된 문서 Atlas cluster 의 어떤 문서 와도 일치하지 않는 경우, Atlas 해당 문서 Atlas cluster 의 지정된 컬렉션 에 삽입합니다.
Atlas cluster 로 데이터를 _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 식별자 필드 에 대해 하나씩 임시 컬렉션 에 병합을 순차적으로 지정합니다. 그런 다음 클러스터의 연결 문자열 사용하여 임시 컬렉션 의 데이터를 대상 컬렉션 에 병합합니다. 여전히 각 on 식별자 필드 에 대해 고유 인덱스 만들어야 합니다.
플래그를 로 설정하여 배경 에서 집계 단계를 실행 수 background true있습니다. 에서 이 명령을 실행 하려면 mongosh 를 db.runCommand 사용합니다.
Atlas 클러스터의 데이터를 확인하고 온라인 아카이브를 삭제합니다.
자세한 내용은 온라인 아카이브 삭제를 참조하세요.
참고
Atlas cluster 로 데이터를 다시 마이그레이션하는 실행 문제가 발생하는 경우 지원팀에 문의 하세요 .