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).