MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Menu Docs
Página inicial do Docs
/ /
/ / /

Restaurar documentos específicos do arquivo online

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.

Você precisa de Project Data Access Admin acesso ou superior ao projeto para seguir esse procedimento.

Esta abordagem não é recomendada para grandes conjuntos de dados (em torno de 1TB de dados) com um grande número de partições.

Execute as seguintes etapas para restaurar dados arquivados específicos ao seu cluster Atlas:

1

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.

2

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.

3

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 item e source, 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.

4

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.

Voltar

Backup e restauração

Nesta página