sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB - kopisamling i java uden looping af alle elementer

I MongoDB 2.6 blev $out-aggregationsoperatoren tilføjet, som skriver resultaterne af aggregeringen til en samling. Dette giver en enkel måde at lave en server-side kopi af alle elementerne i en samling til en anden samling i den samme database ved hjælp af Java driveren (jeg brugte Java driver 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")));

Ifølge dokumenterne kan du for store datasæt (>100MB) bruge muligheden allowDiskUse (Aggregation Memory Restrictions), selvom jeg ikke stødte på den grænse, da jeg kørte den på en>2GB-samling, så den gælder muligvis ikke til denne særlige pipeline, i det mindste i 2.6.0.



  1. Hvordan kan jeg sikkert oprette forbindelse til Heroku-hostede Redis fra kommandolinjen?

  2. Hvad betyder det at passe arbejdssæt ind i RAM til MongoDB?

  3. mongodb tæller antal forskellige værdier pr. felt/nøgle

  4. Opdater et element i et array, der er i et array