MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB - Sammlung in Java kopieren, ohne alle Elemente zu loopen

In MongoDB 2.6 wurde der Aggregationsoperator $out hinzugefügt, der die Ergebnisse der Aggregation in eine Sammlung schreibt. Dies bietet eine einfache Möglichkeit, mit dem Java-Treiber (ich habe die Java-Treiberversion 2.12.0 verwendet) eine serverseitige Kopie aller Elemente in einer Sammlung in eine andere Sammlung in derselben Datenbank zu erstellen:

// 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);

Die Einzeiler-Version:

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

Laut den Dokumenten möchten Sie für große Datasets (> 100 MB) möglicherweise die Option allowDiskUse (Aggregationsspeicherbeschränkungen) verwenden, obwohl ich bei der Ausführung mit einer Sammlung von> 2 GB nicht auf dieses Limit gestoßen bin, sodass es möglicherweise nicht zutrifft zu dieser speziellen Pipeline, zumindest in 2.6.0.