varios update una tipos modificar insertar documentos documento datos crear consultas comandos coleccion actualizar mongodb database

update - tipos de datos en mongodb



¿Cómo se cambia el nombre de una base de datos MongoDB? (6)

El proceso anterior es lento, puede usar el método a continuación, pero necesita mover la colección por colección a otro db.

use admin db.runCommand({renameCollection: "[db_old_name].[collection_name]", to: "[db_new_name].[collection_name]"})

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 copy y borrar como asi ...

db.copyDatabase(''old_name'', ''new_name''); use old_name db.dropDatabase();

¿Hay un comando para cambiar el nombre de una base de datos?


En el caso de que coloque todos sus datos en la base de datos de administración (no debería), notará que db.copyDatabase() no funcionará porque su usuario requiere muchos privilegios que probablemente no quiera darle. Aquí hay un script para copiar la base de datos manualmente:

use old_db db.getCollectionNames().forEach(function(collName) { db[collName].find().forEach(function(d){ db.getSiblingDB(''new_db'')[collName].insert(d); }) });


No, no hay. Ver https://jira.mongodb.org/browse/SERVER-701

Desafortunadamente, esta no es una función simple para que la implementemos debido a la forma en que los metadatos de la base de datos se almacenan en el motor de almacenamiento original (predeterminado). En los archivos MMAPv1, el espacio de nombres (p. Ej., DbName.collection) que describe cada colección e índice individual incluye el nombre de la base de datos, para cambiar el nombre de un conjunto de archivos de bases de datos, cada cadena de espacio de nombres tendrá que ser reescrita. Esto impacta:

  • el archivo .ns
  • Cada archivo numerado de la colección.
  • el espacio de nombres para cada índice
  • Nombres únicos internos de cada colección e índice.
  • contenido de system.namespaces y system.indexes (o sus equivalentes en el futuro)
  • otros lugares que pueden faltar

Esto es solo para lograr el cambio de nombre de una sola base de datos en una instancia independiente de mongod. Para los conjuntos de réplicas, lo anterior debería hacerse en cada nodo de réplica, y en cada nodo cada entrada de oplog que hace referencia a esta base de datos tendría que ser invalidada o reescrita de alguna manera, y luego, si se trata de un grupo fragmentado, también se deben agregar estos cambios en cada fragmento si la base de datos está fragmentada, más los servidores de configuración tienen todos los metadatos de los fragmentos en términos de espacios de nombres con sus nombres completos.

No habría absolutamente ninguna manera de hacer esto en un sistema en vivo.

Para hacerlo sin conexión, sería necesario volver a escribir cada archivo de base de datos para acomodar el nuevo nombre, y en ese momento sería tan lento como el comando "copydb" actual ...


Podrías hacer esto:

db.copyDatabase("db_to_rename","db_renamed","localhost") use db_to_rename db.dropDatabase();

Nota editorial: este es el mismo enfoque utilizado en la pregunta en sí, pero ha demostrado ser útil para otros sin importar.


Solución alternativa: puede volcar su base de datos y restaurarla con un nombre diferente. Como he experimentado, es mucho más rápido que db.copyDatabase() .

$ mongodump -d old_db_name -o mongodump/ $ mongorestore -d new_db_name mongodump/old_db_name

http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/


ALERTA : oye, amigos, ten cuidado al copiar la base de datos, si no quieres arruinar las diferentes colecciones en una sola base de datos.

A continuación se muestra cómo cambiar el nombre

> show dbs; testing games movies

Para cambiar el nombre se utiliza la siguiente sintaxis

db.copyDatabase("old db name","new db name")

Ejemplo:

db.copyDatabase(''testing'',''newTesting'')

Ahora puedes eliminar con seguridad la antigua db de la siguiente manera

use testing; db.dropDatabase(); //Here the db **testing** is deleted successfully

Ahora 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:

db.copyDatabase(''testing'',''movies'');

Entonces, en este contexto, todas las colecciones (tablas) de pruebas se copiarán a la base de datos de películas .