sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB - kopiera samling i java utan looping alla objekt

I MongoDB 2.6 lades $out-aggregationsoperatorn till som skriver resultatet av aggregeringen till en samling. Detta ger ett enkelt sätt att göra en kopia på serversidan av alla objekt i en samling till en annan samling i samma databas med hjälp av Java-drivrutinen (jag använde Java-drivrutin version 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);

One-liner-versionen:

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

Enligt dokumenten, för stora datamängder (>100MB) kanske du vill använda alternativet allowDiskUse (Aggregation Memory Restrictions), även om jag inte stötte på den gränsen när jag körde den på en>2GB-samling, så det kanske inte gäller till just denna pipeline, åtminstone i 2.6.0.



  1. Hur skulle jag kunna skriva aggregering utan att överskrida den maximala dokumentstorleken?

  2. SQL NULLIF() Förklarat

  3. MongoDB $lte Aggregation Pipeline Operator

  4. Få $elemMatch (projektion) att returnera alla objekt som matchar kriterierna