Importante
Recurso indisponível em clusters Flex e Instâncias sem servidor
Neste momento, os clusters flexíveis e as instâncias sem servidor não permitem essa funcionalidade. Para saber mais, consulte Limitações flexíveis do Atlas e limitações de instância sem servidor.
Esta página descreve como restaurar dados arquivados específicos usando o $merge estágio do pipeline. Essa abordagem permite executar uma restauração mais granular com base em critérios específicos. Se você precisar restaurar um cluster completo, consulte Fazer backup e restaurar dados arquivados para obter mais detalhes.
Observação
Certifique-se de que seu cluster esteja provisionado adequadamente para a quantidade de dados que você deseja restaurar do seu arquivo. Caso contrário, você corre o risco de ficar sem espaço durante ou após a restauração. Entre em contato com o Suporte para obter orientação técnica adicional sobre como configurar o tamanho do oplog ou para solucionar quaisquer problemas de espaço no seu Atlas cluster.
Acesso necessário
Você precisa de acesso ou superior ao projeto para seguir esse Project Data Access Admin procedimento.
Considerações
Esta abordagem não é recomendada para grandes conjuntos de dados (em torno de 1TB de dados) com um grande número de partições.
Procedimento
Execute as seguintes etapas para restaurar dados arquivados específicos para seu cluster Atlas :
Pause o Online Archive associado à coleção que contém os dados arquivados que você deseja restaurar.
Consulte Pausar e retomar arquivamento para obter mais informações.
Conecte-se ao Online Archive usando sua string de conexão.
Você deve usar a string de conexão Archive Only para se conectar ao Online Archive. Para saber mais, consulte Conectar-se ao Online Archive.
Use o estágio para mover os dados do seu arquivo para o Atlas $merge cluster.
Para saber mais sobre a sintaxe e o uso do estágio do pipeline $merge para mover os dados de volta para o Atlas cluster, consulte o estágio do pipeline $merge.
Exemplo
Considere os seguintes documentos em um arquivo 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") }
Suponha que você pretende restaurar documentos com base nos campos e item source durante o $merge estágio. A seguinte amostra de código mostra um exemplo de uso do estágio para restaurar dados arquivados com base nesses $merge critérios:
db.<collection>.aggregate([ { "$merge": { "into": { "atlas": { "clusterName": "<atlas-cluster-name>", "db": "<db-name>", "coll": "<collection-name>" } }, "on": [ "item", "source" ], "whenMatched": "keepExisting", "whenNotMatched": "insert" } } ])
O código emprega a seguinte lógica:
Se um documento arquivado corresponder a um documento no Atlas cluster nos campos
itemesource, o Atlas manterá o documento existente no cluster porque a cópia do documento no Atlas cluster é mais recente do que a versão arquivada.Se um documento arquivado não corresponder a nenhum documento no Atlas cluster, o Atlas insere o documento na coleção especificada no Atlas cluster.
Ao restaurar os dados no Atlas cluster, os dados arquivados podem ter _id campos duplicados. Para este exemplo, podemos incluir um estágio para classificar $sort os _id campos released e antes do $merge estágio para garantir que o Atlas escolha os documentos com a data mais recente se houver duplicatas a serem resolvidas.
A seguinte amostra de código adiciona o $sort estágio:
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 } )
Para saber mais sobre como resolver campos duplicados, consulte as $merge considerações.
Observação
Se houver múltiplos campos on , você deverá criar um índice único composto nos campos de identificador on :
db.<collection>.createIndex( { item: 1, source: 1 }, { unique: true } )
Como alternativa, especifique mesclagens sequencialmente, uma para cada campo de identificador on , para uma coleção temporária. Em seguida, mescle os dados na collection temporária à collection de destino usando a string de conexão do cluster. Você ainda deve criar um índice único para cada campo de identificador on.
Você pode executar o estágio de agregação em segundo plano definindo o sinalizador background truecomo. Para executar este comando no,mongosh utilize db.runCommand o.
Verifique os dados no Atlas cluster e exclua o arquivamento online.
Consulte Excluir um Online Archive para obter mais informações.
Observação
Se você tiver problemas ao migrar dados de volta para o Atlas cluster, entre em contato com o Suporte.