2012-12-17 16 views

risposta

26

Il modo migliore per aver fatto questo (considerando il nome della collezione termina con _backup) è eventualmente avere mongorestore usato: http://docs.mongodb.org/manual/reference/mongorestore/

Tuttavia in questo caso dipende. Se la raccolta è unsharded è possibile utilizzare renameCollection (http://docs.mongodb.org/manual/reference/command/renameCollection/) oppure è possibile utilizzare un metodo più manuale (in codice JavaScript):

db.collection1.drop(); // Drop entire other collection 
db.collection1_backup.find().forEach(function(doc){ 
    db.collection1.insert(doc); // start to replace 
}); 

Quelli sono i metodi più comuni di fare questo.

3

utile anche: per esportare la raccolta in un file JSON

mongoexport --collection collection1_backup --out collection1.json 

di importare la raccolta da file JSON

mongoimport --db test --collection collection1 --file collection1.json 

importare singola raccolta dal file di backup/dump di una necessità di convertire * .bson file in * .json utilizzando

bsondump collection1_backup.bson > collection1_backup.json 
+8

In generale è preferibile utilizzare 'mongodump' e' mongorestore' quando si copiano raccolte, poiché la conversione di documenti in JSON e ritorno può influire sulla [fedeltà del tipo di dati] (http://docs.mongodb.org/manual/amministrazione/import-export/# di dati di tipo fedeltà). Esistono alcuni tipi di dati che esistono in BSON che possono avere una [diversa rappresentazione in JSON] (http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON) dove non esiste un equivalente JSON rigoroso. L'uso di 'mongoimport' /' mongoexport' può essere OK a seconda dei dati, ma questo è un avvertimento importante da tenere presente. – Stennie

+0

@Stennie È anche importante notare che fare un mongodump/mongorestore preserverà gli indici. Quindi, se stai cercando di duplicare documenti tra collezioni, non sarai in grado di ripristinare. mongoexport e mongoimport devono essere utilizzati se si sta tentando di duplicare documenti tra raccolte. – ivandov

+0

@ivandov È possibile saltare gli indici di ricreazione (a parte l'indice '_id' richiesto) con' mongorestore --noIndexRestore'. Si noti che 'mongorestore' (come in MongoDB 3.4) fa solo inserimenti; se esiste un documento con lo stesso '_id', non verrà aggiornato o sostituito. Lo strumento 'mongoimport' supporta gli upserts (e in 3.4, merges), ma funziona con i formati di testo piuttosto che con il formato BSON nativo di MongoDB. 'mongodump' e' mongorestore' sono ancora le opzioni raccomandate se si desidera ricreare i dati (e facoltativamente i metadati di raccolta) in modo identico tra le distribuzioni di MongoDB. – Stennie

0

Uso del driver Java

Prova di sotto di un:

public void copyTo(String db,String sourceCollection,String destinationCollection,int limit) throws   
UnknownHostException { 

    MongoClient mongo = new MongoClient("localhost", 27017); 
    DB database = mongo.getDB(db); 
    DBCollection collection = database.getCollection(sourceCollection); 
    DBCursor dbCursor = collection.find().limit(limit); 
    List<DBObject> list = dbCursor.toArray(); 
    DBCollection destination = database.getCollection(destinationCollection); 
    destination.insert(list, WriteConcern.NORMAL); //WRITE CONCERN is based on your requirment. 

} 
1

Modo migliore sarebbe quella di utilizzare .toArray()

db.collection1.drop(); // Drop entire other collection 

// creates an array which can be accessed from "data" 
db.collection1_backup.find().toArray(function(err, data) { 

     // creates a collection and inserting the array at once 
     db.collection1.insert(data); 
}); 
0

È possibile utilizzare il comando semplice per backup MongoDB Collezione

db.sourceCollectionName.copyTo('targetCollectionName') 

Il tuo targetCollectionName deve essere in Single (') o Double (") Quota

Nota:

Il metodo db.collection.copyTo() utilizza internamente il comando eval. Come risultato di , l'operazione db.collection.copyTo() accetta un blocco globale che blocca tutte le altre operazioni di lettura e scrittura fino al completamento di db.collection.copyTo().

+0

Questo non funziona con le raccolte Sharded, btw – oshaiken