Dans MongoDB 2.6, l'opérateur d'agrégation $out a été ajouté pour écrire les résultats de l'agrégation dans une collection. Cela fournit un moyen simple de faire une copie côté serveur de tous les éléments d'une collection vers une autre collection de la même base de données à l'aide du pilote Java (j'ai utilisé la version 2.12.0 du pilote 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 version en une ligne :
source.aggregate(Arrays.asList((DBObject)new BasicDBObject("$out", "target")));
Selon la documentation, pour les grands ensembles de données (> 100 Mo), vous pouvez utiliser l'option allowDiskUse (restrictions de mémoire d'agrégation), bien que je n'aie pas rencontré cette limite lorsque je l'ai exécuté sur une collection> 2 Go, donc il peut ne pas s'appliquer à ce pipeline particulier, au moins en 2.6.0.