Importante
Recurso indisponível nos clusters Flex
Neste momento, os clusters flexíveis não permitem essa funcionalidade. Para saber mais, veja Limitações do Atlas Flex.
Esta página descreve como restaurar dados de arquivo específicos usando o estágio do pipeline $merge. Essa abordagem permite executar um restaurar mais granular com base em critérios específicos. Se você precisar restaurar um cluster completo, consulte Fazer backup e restaurar arquivo arquivado para obter mais detalhes.
Observação
Certifique-se de que seu cluster tenha provisionamento adequado 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 Project Data Access Admin acesso ou superior ao projeto para seguir esse 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 ao seu cluster Atlas:
Pause o arquivo online 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 arquivo online 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 $merge para mover os dados do seu arquivo para o Atlas 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 item e source durante o estágio $merge. A seguinte amostra de código mostra um exemplo de uso do $merge estágio para restaurar dados arquivados com base nesses 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 cluster Atlas nos campos
itemesource, o Atlas manterá o documento existente no cluster porque a cópia do documento no cluster Atlas é mais recente do que a versão arquivada.Se um documento do arquivo não corresponder a nenhum documento no cluster Atlas, o Atlas insere o documento na coleção especificada no cluster Atlas.
Ao restaurar os dados no cluster Atlas, os dados de arquivo podem ter campos _id duplicados. Para este exemplo, podemos incluir um estágio $sort para classificar os campos _id e released antes do estágio $merge 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 estágio $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 } )
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 coleção temporária à coleção 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 como true. Para executar este comando no mongosh, utilize o db.runCommand.
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.