sql >> Base de Datos >  >> NoSQL >> MongoDB

Copiar/clonar una colección en MongoDB

En versiones anteriores de MongoDB, podía usar db.collection.copyTo() método para copiar una colección.

Desde entonces, MongoDB ha desaprobado ese método. Además, a partir de la versión 4.2, MongoDB ha eliminado eval dominio. Dado db.collection.copyTo() envuelve eval , esto significa que no puede usar ninguno de ellos si está usando MongoDB 4.2 o posterior.

Afortunadamente, hay otra forma de copiar una colección de MongoDB.

Buscar herramientas de base de datos MongoDB

En MongoDB, puede clonar una colección utilizando las herramientas de base de datos de MongoDB. Específicamente, puedes usar mongodump y mongorestore .

Las herramientas de base de datos de MongoDB son un conjunto de utilidades de línea de comandos para trabajar con MongoDB.

Si no está seguro de si tiene instaladas las herramientas de base de datos de MongoDB, intente ejecutar los siguientes comandos en su terminal o símbolo del sistema para verificar:

mongodump --version
mongorestore --version

Eso verifica específicamente el mongodump y mongorestore versiones.

Si no los tiene, puede usar las instrucciones de instalación en el sitio web de MongoDB para instalar MongoDB Database Tools en su sistema.

Clonar una colección en la misma base de datos

Necesitas ejecutar mongodump y mongorestore desde la línea de comandos de su sistema (por ejemplo, una nueva ventana de terminal o símbolo del sistema). No lo ejecutes desde mongo cáscara.

Aquí hay un ejemplo de código que clona una colección en la misma base de datos:

mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive  --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'

En este caso, hacemos una copia de seguridad de las pets colección en el PetHotel base de datos, luego restáurela como pets2 en la misma base de datos.

Esto usa mongodump para crear un archivo de respaldo de la colección, luego mongorestore para restaurar esa colección con un nombre diferente. Hicimos esto volcando la colección en el flujo de salida estándar y canalizando a mongorestore .

Esto es lo que hace cada parámetro:

Parámetro Descripción
--archive Escribe la salida en un archivo de almacenamiento específico o, si el archivo de almacenamiento no está especificado, escribe en la salida estándar (stdout ). En nuestro caso, el archivo de almacenamiento no está especificado, por lo que escribió en la salida estándar.
--db Especifica la base de datos que contiene la colección que queremos clonar. En este caso, la base de datos se llama PetHotel .
--nsFrom Especifica la colección en el archivo de volcado. Esta es la colección que queremos clonar.
--nsTo Especifica el nombre de la colección que debe usarse cuando se restaura. En nuestro caso, lo llamamos pets2 .

Copiar una colección a otra base de datos

Puede usar la misma técnica para copiar la colección a otra base de datos. En este caso, ni siquiera necesitarías cambiar el nombre de la colección si no quieres.

He aquí un ejemplo:

mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive  --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'

Esto es muy similar al ejemplo anterior, excepto que nuestro --nsTo el argumento especifica PetHouse.pets como colección de destino.

Esto significa que la colección clonada se llamará pets , y estará ubicado en el PetHouse base de datos (en lugar del PetHotel original base de datos).