MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB - copie a coleção em java sem fazer um loop de todos os itens


No MongoDB 2.6, foi adicionado o operador de agregação $out, que grava os resultados da agregação em uma coleção. Isso fornece uma maneira simples de fazer uma cópia do lado do servidor de todos os itens em uma coleção para outra coleção no mesmo banco de dados usando o driver Java (usei o driver Java versão 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);

A versão de uma linha:
source.aggregate(Arrays.asList((DBObject)new BasicDBObject("$out", "target")));

De acordo com os documentos, para grandes conjuntos de dados (> 100 MB), você pode querer usar a opção allowDiskUse (Restrições de Memória de Agregação), embora eu não tenha encontrado esse limite quando o executei em uma coleção de> 2 GB, portanto, pode não se aplicar para este pipeline específico, pelo menos em 2.6.0.