Hay un error tipográfico en el nombre de mi base de datos MongoDB y estoy buscando cambiar el nombre de la base de datos.
Puedo copiar y eliminar así ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
¿Hay un comando para cambiar el nombre de una base de datos?
copyDatabase
también está en desusoRespuestas:
No, no lo hay. Ver https://jira.mongodb.org/browse/SERVER-701
fuente
Podrías hacer esto:
Nota editorial: este es el mismo enfoque utilizado en la pregunta en sí, pero ha demostrado ser útil para otros independientemente.
fuente
copyDatabase
métodocopyDatabase
método *, que es innecesario y, por lo tanto, una solución peor de la que el OP ya estaba al tanto. * cc @GurbakhshishSinghSolución alternativa: puede volcar su base de datos y restaurarla en un nombre diferente. Como he experimentado, es mucho más rápido que
db.copyDatabase()
.http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
fuente
mongodump
creado. No sabía que puede restaurarlo con un nombre diferente. ¡Gracias!--gzip
y crea un archivodb.copyDatabase()
que ahora está en desuso--db
(-d
) también está en desuso. Parece que ha habido una fiesta de desaprobación, dadocopyDatabase
que también se ha ido. He tocado SERVER-701 con mis notas .ALERTA : Hola amigos, tengan cuidado al copiar la base de datos, si no quieren estropear las diferentes colecciones en una sola base de datos.
A continuación se muestra cómo cambiar el nombre.
Para cambiar el nombre, use la siguiente sintaxis
Ejemplo:
Ahora puede eliminar de forma segura el viejo db de la siguiente manera
Ahora solo piense qué sucede si intenta cambiar el nombre del nuevo nombre de la base de datos con el nombre de la base de datos existente
Ejemplo:
Entonces, en este contexto, todas las colecciones (tablas) de pruebas se copiarán a la base de datos de películas .
fuente
copyDatabase
se ha ido. He tocado SERVER-701 con mis notas .Aunque Mongodb no proporciona el comando para cambiar el nombre de la base de datos, sí proporciona el comando de colección Colección , que no solo modifica el nombre de la colección, sino que también modifica el nombre de la base de datos.
Este comando solo modifica los metadatos, el costo es muy pequeño, solo necesitamos recorrer todas las colecciones bajo
db1
, renombradasdb2
para lograr renombrar el nombre de la base de datos.puedes hacerlo en este script Js
fuente
foo
dentro de labar
base de datos tiene un espacio de nombres debar.foo
. El índice en por lo_id
tanto tiene el espacio de nombresbar.foo._id_
. Cambiar el nombre de la colección (debe) realizar una búsqueda de prefijo y reemplazar en todos los espacios de nombres que es consciente de, similar a la--nsFrom
y--nsTo
opciones amongorestore
.El proceso anterior es lento, puede usar el siguiente método pero necesita mover colección por colección a otra base de datos.
fuente
No existe un mecanismo para cambiar el nombre de las bases de datos. La respuesta actualmente aceptada al momento de escribir es objetivamente correcta y ofrece algunos detalles de fondo interesantes sobre la excusa aguas arriba, pero no ofrece sugerencias para replicar el comportamiento. Otras respuestas apuntan a
copyDatabase
, que ya no es una opción ya que la funcionalidad se ha eliminado en 4.0 . He actualizado SERVER-701 con mis notas e incredulidad. 🙃El comportamiento equivalente implica
mongodump
ymongorestore
en un poco de baile:Exporte sus datos, tomando nota de los "espacios de nombres" en uso. Por ejemplo, en uno de mis conjuntos de datos, tengo una colección con el espacio de nombres
byzmcbehoomrfjcs9vlj.Analytics
; ese prefijo (en realidad el nombre de la base de datos ) será necesario en el siguiente paso.Importa tus datos, suministros
--nsFrom
y--nsTo
argumentos. ( Documentación. ) Continuando con mi ejemplo hipotético (y extremadamente ilegible) anterior, para restaurar a un nombre más sensible, invoco:Algunos también pueden señalar el
--db
argumento de mongorestore, sin embargo, esto también está en desuso y desencadena una advertencia contra el uso en copias de seguridad de carpetas que no son BSON con una sugerencia completamente errónea de "use --nsInclude instead
". La traducción del espacio de nombres anterior es equivalente al uso de la--db
opción, y es la configuración correcta para la manipulación del espacio de nombres, ya que no estamos intentando filtrar lo que se está restaurando.fuente
--nsFrom
y--nsTo
trabajó para mi ¡Gracias!Traté de hacer.
y llegué a saber que la comunidad de mongo lo ha desaprobado aunque creó la copia de seguridad o cambió el nombre de DB.
Entonces, no estoy convencido con el enfoque anterior, tuve que tomar Dump of local usando el siguiente comando
conectado a Db.
entonces
luego restauró la base de datos con el comando.
fuente
En el caso de que coloque todos sus datos en la base de datos de administración (no debería hacerlo), notará
db.copyDatabase()
que no funcionará porque su usuario requiere muchos privilegios que probablemente no quiera otorgarle. Aquí hay un script para copiar la base de datos manualmente:fuente