2011-01-14 6 views
16

Por lo que veo todos los comandos operan en la misma base de datos en mongodb. Quiero hacer algo como esto:.¿Cómo inserto un registro de una base de datos mongo a otra?

db.mySourceCollection.find() forEach (función (x) {db.theDestinationCollection.save (x)});

donde mySourceCollection está en liveDatabase y theDestinationCollection está en testDatabase.

Respuesta

15

Uso use :-)

> var documents = db.mySourceCollection.find() 
> use testDatabase 
switched to db testDatabase 
> documents.forEach(function(x){ db.theDestinationCollection.insert(x) }) 

db se utiliza para referirse a la base de datos conectada actualmente, sin embargo, puede cambiar las bases de datos sobre la marcha utilizando el comando use, como he mostrado anteriormente.

Echa un vistazo al comando help en el shell - ¡menciona este comando y mucho más!

+0

Gracias! Sabía sobre el uso, pero no habría pensado en persistir el estado en una variable. En mi humilde opinión, esperaría un método use() en db para el uso de fluidos, p. db.use ('sourceDb'). collectionA.do (db.use ('destDb'). – b7kich

+0

Puede suceder que la base de datos tenga caracteres UTF-8. Como esto se ejecuta a través del cliente, si el cliente es el nativo (por ejemplo para Ubuntu, '$ mongo --version' =>' MongoDB shell version: 1.6.3') puede carecer de UTF-8 y luego la copia fallará. Si este es el caso y no quiere poner sucio en su servidor para recompilar un nuevo cliente, siempre puede recompilar en una máquina separada y hacer este trabajo a través de la red conectándose a un servidor remoto. Sin embargo, los datos fluirán del servidor al cliente y viceversa, por lo que puede ser lento. De todos modos con un cliente UTF-8 remoto, funciona !!! –

13

use dbname no funciona en el modo de guión (es decir, cuando las secuencias de comandos shell con el Javascript), por lo que debe utilizar el método db.getSiblingDB() en lugar de volver a asignar la variable 'db', por ejemplo:

db = db.getSiblingDB("otherdb") 

Más información aquí : http://www.mongodb.org/display/DOCS/Scripting+the+shell

Cuestiones relacionadas