Importante
Característica no disponible en los clústeres Flex
Los clústeres flexibles no admiten esta funcionalidad en este momento. Para obtener más información, consulte Limitaciones de Atlas Flex.
Esta página describe cómo restaurar datos archivados específicos mediante el Etapa de canalización $merge. Este enfoque permite ejecutar una restauración más granular según criterios específicos. Si necesita restaurar un clúster completo, consulte "Copia de seguridad y restauración de datos archivados" para obtener más información.
Nota
Asegúrate de que tu clúster esté adecuadamente aprovisionado para la cantidad de datos que deseas restaurar desde tu fichero. De lo contrario, corre el riesgo de quedarse sin espacio durante o después de la restauración. Contacte a Asistencia Técnica para obtener orientación técnica adicional sobre la configuración del tamaño del oplog o para resolver cualquier problema de espacio en su clúster Atlas.
Acceso requerido
Necesitas acceso Project Data Access Admin o superior al proyecto para seguir este procedimiento.
Considerations
Este enfoque no se recomienda para conjuntos de datos grandes (alrededor de 1TB de datos) con un gran número de particiones.
Procedimiento
Realiza los siguientes pasos para restaurar datos archivados específicos a tu clúster de Atlas:
Pausa el fichero en linea asociado con la colección que contiene los datos archivados que deseas restaurar.
Consulte Pausar y reanudar el archivado para obtener más información.
Conéctese al Archivo en línea utilizando su cadena de conexión.
Debes utilizar el Archive Only cadena de conexión para conectarse al fichero en linea. Para obtener más información, consulta Conectarse al fichero en línea.
Utilice la etapa $merge para mover los datos de su fichero a su clúster de Atlas.
Para aprender más sobre la sintaxis y el uso de la etapa $merge del pipeline para mover datos de vuelta a tu clúster Atlas, consulta la etapa del pipeline $merge.
Ejemplo
Considera los siguientes documentos en una S3 fichero:
{ "_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") }
Supongamos que deseas restaurar documentos basados en los campos item y source durante la etapa $merge. El siguiente código de muestra muestra un ejemplo de uso de la etapa $merge para restaurar datos de fichero basados en ese criterio:
db.<collection>.aggregate([ { "$merge": { "into": { "atlas": { "clusterName": "<atlas-cluster-name>", "db": "<db-name>", "coll": "<collection-name>" } }, "on": [ "item", "source" ], "whenMatched": "keepExisting", "whenNotMatched": "insert" } } ])
El código emplea la siguiente lógica:
Si un documento archivado coincide con un documento en el clúster de Atlas en los campos
itemysource, Atlas mantiene el documento existente en el clúster porque la copia del documento en el clúster de Atlas es más reciente que la versión archivada.Si un documento archivado no se corresponde con ningún documento en el clúster de Atlas, Atlas insertará el documento en la colección especificada del clúster de Atlas.
Al restaurar datos en el clúster de Atlas, los datos archivados podrían tener _id campos duplicados. En este ejemplo, podemos incluir una etapa para ordenar los $sort campos _id y released antes de la $merge etapa y así garantizar que Atlas seleccione los documentos con la fecha más reciente si hay duplicados que resolver.
El siguiente código de muestra agrega la etapa $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 obtener más información sobre cómo resolver campos duplicados, consulte las consideraciones de $merge.
Nota
Si hay varios campos de on, debe crear un índice único compuesto en los campos identificadores de on:
db.<collection>.createIndex( { item: 1, source: 1 }, { unique: true } )
Alternativamente, especifique las fusiones de forma secuencial, una para cada campo de identificador on, en una colección temporal. Luego, combina los datos en la colección temporal con la colección objetivo utilizando la cadena de conexión del clúster. Aún se debe crear un índice único para cada campo identificador on.
Puede ejecutar la etapa de agregación en segundo plano configurando la bandera background en true. Para ejecutar este comando en mongosh, utiliza el db.runCommand.
Verifica los datos en el clúster de Atlas y borra el fichero en línea.
Consulte Eliminar un archivo en línea para obtener más información.
Nota
Si tienes problemas al migrar datos de vuelta a tu clúster de Atlas, contacta a Soporte.