MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB - copier la collection en Java sans boucler tous les éléments

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.