MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB - copia la raccolta in Java senza eseguire il loop di tutti gli elementi

In MongoDB 2.6, è stato aggiunto l'operatore di aggregazione $out che scrive i risultati dell'aggregazione in una raccolta. Ciò fornisce un modo semplice per eseguire una copia lato server di tutti gli elementi di una raccolta in un'altra raccolta nello stesso database utilizzando il driver Java (ho usato il driver Java versione 2.12.0):

// set up pipeline
List<DBObject> ops = new ArrayList<DBObject>();
ops.add(new BasicDBObject("$out", "target")); // writes to collection "target"

// run it
MongoClient client = new MongoClient("host");
DBCollection source = client.getDB("db").getCollection("source")
source.aggregate(ops);

La versione one-liner:

source.aggregate(Arrays.asList((DBObject)new BasicDBObject("$out", "target")));

Secondo i documenti, per set di dati di grandi dimensioni (> 100 MB) potresti voler utilizzare l'opzione allowDiskUse (Restrizioni della memoria di aggregazione), anche se non ho riscontrato quel limite quando l'ho eseguito su una raccolta> 2 GB, quindi potrebbe non essere applicabile a questa particolare pipeline, almeno nella 2.6.0.