sql >> Database >  >> NoSQL >> MongoDB

MongoDB - kopieer verzameling in Java zonder alle items in een lus te plaatsen

In MongoDB 2.6 is de aggregatie-operator $out toegevoegd die de resultaten van de aggregatie naar een verzameling schrijft. Dit biedt een eenvoudige manier om een ​​server-side kopie te maken van alle items in een collectie naar een andere collectie in dezelfde database met behulp van het Java-stuurprogramma (ik gebruikte Java-stuurprogramma versie 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);

De one-liner-versie:

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

Volgens de documenten wil je voor grote datasets (> 100 MB) misschien de allowDiskUse-optie (Aggregation Memory Restrictions) gebruiken, hoewel ik die limiet niet tegenkwam toen ik het op een verzameling van> 2 GB uitvoerde, dus het is mogelijk niet van toepassing naar deze specifieke pijplijn, in ieder geval in 2.6.0.



  1. Voeg een string toe aan het einde van een bestaand veld in MongoDB

  2. Specifieke velden uitsluiten in wildcard-index in MongoDB

  3. Node.js &Redis; Wachten tot een lus is afgelopen

  4. Model.find().toArray() beweert geen .toArray()-methode te hebben