sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:copie la colección en Java sin hacer un bucle en todos los elementos

En MongoDB 2.6, se agregó el operador de agregación $out que escribe los resultados de la agregación en una colección. Esto proporciona una forma sencilla de hacer una copia del lado del servidor de todos los elementos de una colección a otra colección en la misma base de datos utilizando el controlador Java (utilicé la versión 2.12.0 del controlador Java):

// 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 versión de una línea:

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

De acuerdo con los documentos, para grandes conjuntos de datos (> 100 MB), es posible que desee utilizar la opción allowDiskUse (Restricciones de memoria agregada), aunque no encontré ese límite cuando lo ejecuté en una colección de> 2 GB, por lo que es posible que no se aplique. a esta tubería en particular, al menos en 2.6.0.