2012-06-13 28 views
5

En primer lugar, tenga en cuenta esta cuestión es diferente de los dos siguientesMongoDB: ¿Cómo combinar dos colecciones/bases de datos juntas en una sola?

MongoDB: Combine data from multiple collections into one..how?

Merging two collections in MongoDB

MongoDB and "joins"

voy a explicar de la siguiente manera:

tengo dos bases de datos con nombre: DB_A y DB_B en mi mongodb.

Cada base de datos tiene una colección con el mismo nombre llamado store.

Ambas colecciones tienen un montón un montón de documentos que tienen exactamente la misma estructura {clave: "key1", valor: "valor1"}, etc.

En realidad, se suponía que sólo crean DB_A e insertar todos los documentos en DB_A. Pero más tarde, cuando hice mi segunda ronda de inserción, cometí un error al escribir el nombre incorrecto como nombre de la base de datos.

Así que ahora, cada base de datos tiene un tamaño de 32 GB, deseo unir dos bases de datos.

Uno de los problemas/restricción es que el espacio libre disponible ahora sólo es de 15 GB, por lo que no sólo puede copy todas las cosas desde DB_B a DB_A.

Me pregunto si puedo hacer move? o ¿cuál es la forma más simple/mejor/rápida para fusionar las dos bases de datos simples? Prefiero la manera más eficiente, ya que simplemente reinsertar 32GB en DB_A llevará bastante tiempo.

+2

Toma el primer documento de DB_B. Insértelo en DB_A si aún no está allí. Eliminarlo de DB_B. Repita hasta que termine. –

+0

@SergioTulentsev Si elimino DB_B y reinserto todo (de DB_B) recién en DB_A usando mi código, ¿será de esta manera más lento que el que sugirió? – Jack

+0

Si todos sus datos están en DB_B, puede soltar DB_A y simplemente renombrar DB_B. –

Respuesta

4

Creo que la forma más fácil (y tal vez la única) es escribir un script que combine las dos bases de datos documento tras documento.

  1. Obtenga el primer documento de DB_B.
  2. Insértela en DB_A si es necesario.
  3. Eliminarlo de DB_B.
  4. Repita hasta que finalice.

En lugar de eliminar documentos del db de origen (DB_B), es posible que desee leer documentos en lotes. Esto debería ser más eficiente, pero un poco más difícil de codificar (especialmente si nunca hiciste tal cosa).

+0

cómo cambiar entre las diferentes bases de datos db_a y db_b? Estoy tratando de escribir un guion en Python. Necesito alguna guía – rkatkam

+1

@rkatkam: solo crea dos conexiones separadas. –

+0

Ok. Un qtn más, ¿y si tengo dos bases de datos separadas con el mismo nombre? ¿Cómo debo proceder? Actualmente los tengo en diferentes máquinas. Quiero fusionarlos. ¿Alguna idea? – rkatkam

Cuestiones relacionadas