una importar guardar exportar datos crear coleccion mongodb

importar - exportar una coleccion mongodb



Cómo copiar una colección de una base de datos a otra en MongoDB (15)

Abusaría de la función de conexión en mongo cli mongo doc . eso significa que puede iniciar una o más conexiones. si desea copiar la recopilación de clientes de la prueba a la prueba 2 en el mismo servidor. primero empiezas mongo shell

use test var db2 = connect(''localhost:27017/test2'')

haga un hallazgo normal y copie los primeros 20 registros en test2.

db.customer.find().limit(20).forEach(function(p) { db2.customer.insert(p); });

o filtrar por algunos criterios

db.customer.find({"active": 1}).forEach(function(p) { db2.customer.insert(p); });

simplemente cambie el host local a IP o nombre de host para conectarse al servidor remoto. Utilizo esto para copiar datos de prueba a una base de datos de prueba para probar.

¿Hay una manera simple de hacer esto?


En caso de que algunos usuarios de heroku tropiecen aquí y quieran copiar algunos datos de la base de datos de producción a la base de datos de producción o viceversa, así es cómo se hace de manera muy conveniente (Nota: espero que no haya errores tipográficos ahí, no se puede comprobar en cajeros automáticos). Voy a tratar de confirmar la validez del código lo antes posible):

to_app="The name of the app you want to migrate data to" from_app="The name of the app you want to migrate data from" collection="the collection you want to copy" mongohq_url=`heroku config:get --app "$to_app" MONGOHQ_URL` parts=(`echo $mongohq_url | sed "s_mongodb://heroku:__" | sed "s_[@/]_ _g"`) to_token=${parts[0]}; to_url=${parts[1]}; to_db=${parts[2]} mongohq_url=`heroku config:get --app "$from_app" MONGOHQ_URL` parts=(`echo $mongohq_url | sed "s_mongodb://heroku:__" | sed "s_[@/]_ _g"`) from_token=${parts[0]}; from_url=${parts[1]}; from_db=${parts[2]} mongodump -h "$from_url" -u heroku -d "$from_db" -p"$from_token" -c "$collection" -o col_dump mongorestore -h "$prod_url" -u heroku -d "$to_app" -p"$to_token" --dir col_dump/"$col_dump"/$collection".bson -c "$collection"


En mi caso, tuve que usar un subconjunto de atributos de la colección anterior en mi nueva colección. Así que terminé eligiendo esos atributos al llamar a insertar en la nueva colección.

db.<sourceColl>.find().forEach(function(doc) { db.<newColl>.insert({ "new_field1":doc.field1, "new_field2":doc.field2, .... }) });`


En realidad, hay un comando para mover una colección de una base de datos a otra. Simplemente no se llama "mover" o "copiar".

Para copiar una colección, puede clonarla en el mismo archivo db y luego mover el clon.

Para clonar:

> use db1 > db.source_collection.find().forEach( function(x){db.collection_copy.insert(x)} );

Para mover:

> use admin switched to db admin > db.runCommand({renameCollection: ''db1.source_collection'', to: ''db2.target_collection''}) // who''d think rename could move?

Las otras respuestas son mejores para copiar la colección, pero esto es especialmente útil si está buscando moverla.


Esto no resolverá su problema, pero el shell mongodb tiene un método copyTo que copia una colección en otra en la misma base de datos :

db.mycoll.copyTo(''my_other_collection'');

También se traduce de BSON a JSON, por lo que mongodump / mongorestore es la mejor manera de hacerlo, como han dicho otros.


Esto podría ser solo un caso especial, pero para una colección de documentos 100k con dos campos de cadena aleatorios (la longitud es de 15-20 caracteres), usar un mapreduce tonto es casi el doble de rápido que find-insert / copyTo:

db.coll.mapReduce(function() { emit(this._id, this); }, function(k,vs) { return vs[0]; }, { out : "coll2" })



La mejor manera es hacer un mongodump luego mongorestore.

Puede seleccionar la colección a través de:

mongodump -d some_database -c some_collection

[Opcionalmente, zip some_database.zip some_database/* -r el volcado ( zip some_database.zip some_database/* -r ) y scp en otro lugar]

Luego restaurarlo:

mongorestore -d some_other_db -c some_or_other_collection dump/some_collection.bson

Se conservarán los datos existentes en some_or_other_collection . De esta forma, puede "agregar" una colección de una base de datos a otra.

Antes de la versión 2.4.3, también deberá agregar sus índices una vez que haya copiado sus datos. Comenzando con 2.4.3, este proceso es automático y puede deshabilitarlo con --noIndexRestore .


Por el momento no hay ningún comando en MongoDB que pueda hacer esto. Tenga en cuenta el boleto JIRA con solicitud de función relacionada .

Podrías hacer algo como:

db.<collection_name>.find().forEach(function(d){ db.getSiblingDB(''<new_database>'')[''<collection_name>''].insert(d); });

Tenga en cuenta que con esto, las dos bases de datos deberían compartir el mismo mongod para que esto funcione.

Además de esto, puede hacer un mongodump de una colección de una base de datos y luego mongorestore la colección a la otra base de datos.


Puede usar el marco de agregación para resolver su problema

db.oldCollection.aggregate([{$out : "newCollection"}])

Cabe señalar que los índices de oldCollection no se copiarán en newCollection.


Sé que esta pregunta ha sido respondida, pero personalmente no respondería a @JasonMcCays debido al hecho de que los cursores se transmiten y esto podría causar un ciclo de cursor infinito si la colección todavía se está utilizando. En cambio, usaría una instantánea ():

http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database

La respuesta de @bens también es buena y funciona bien para las copias de seguridad de las colecciones, no solo eso, sino que mongorestore no necesita compartir el mismo mongod.



Siempre puedes usar Robomongo. A partir de v0.8.3 hay una herramienta que puede hacer esto haciendo clic con el botón derecho en la colección y seleccionando "Copiar colección a la base de datos".

Para detalles, ver http://blog.robomongo.org/whats-new-in-robomongo-0-8-3/

Esta característica se eliminó en 0.8.5 debido a su naturaleza defectuosa, por lo que tendrá que usar 0.8.3 o 0.8.4 si quiere probarla.


Usando pymongo, necesitas tener ambas bases de datos en el mismo mongod, hice lo siguiente:

db = base de datos original
db2 = base de datos a copiar

cursor = db["<collection to copy from>"].find() for data in cursor: db2["<new collection>"].insert(data)


Yo solía hacer:

use sourcedatabase; var docs=db.sourcetable.find(); use targetdatabase; docs.forEach(function(doc) { db.targettable.insert(doc); });