2011-01-14 11 views
16

Per quanto vedo tutti i comandi operano sullo stesso database in mongodb. Voglio fare qualcosa del genere:.Come inserire un record da un database mongo in un altro?

db.mySourceCollection.find() forEach (function (x) {db.theDestinationCollection.save (x)});

dove mySourceCollection è in liveDatabase e theDestinationCollection è in testDatabase.

risposta

15

Usa use :-)

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

db viene utilizzato per riferirsi al database attualmente connesso, tuttavia è possibile passare i database al volo utilizzando il comando use, come ho mostrato sopra.

Controlla il comando help nella shell - menziona questo comando e molto altro!

+0

Grazie! Sapevo dell'uso, ma non avrei mai pensato di mantenere lo stato in una variabile. IMHO Mi aspetterei un metodo use() su db per uso fluido, ad es. db.use ('sourceDb'). collectionA.do (db.use ('destDb'). – b7kich

+0

Può accadere che il database abbia caratteri UTF-8 .Questo viene eseguito dal client, se il client è nativo (per esempio per Ubuntu, '$ mongo --version' =>' Versione della shell MongoDB: 1.6.3') potrebbe mancare UTF-8 e quindi la copia fallirà. Se questo è il caso e non si vuole mettere sporco nel tuo server per ricompilare un nuovo client, puoi sempre ricompilarlo in una macchina separata e fare questo lavoro sulla rete collegandoti a un server remoto.Tuttavia, i dati fluiranno dal server al client e viceversa, quindi può essere lento, comunque con un client UTF-8 remoto, funziona !!! –

13

use dbname non funziona nella modalità di script (cioè quando script della shell con javascript), così si dovrebbe utilizzare il metodo db.getSiblingDB() invece di riassegnare la variabile 'db', ad esempio:

db = db.getSiblingDB("otherdb") 

Maggiori informazioni qui : http://www.mongodb.org/display/DOCS/Scripting+the+shell

Problemi correlati