将具有大量数据的 mongo 集合复制到另一个集合?

Ris*_*ora 2 mongodb nosql

我有一个包含 250 万条数据的 mongo 集合,并且可能会增长到 300 万条。我正在使用 spring 批处理,并试图将该集合复制到另一个集合。我使用的方法如下:

  • 在 tasklet 中,我创建了一个 ProcessBuilder 对象并调用了一个执行 mongo 查询的 shell 脚本。shell脚本的内容如下:

    >  mongo $serverURL/$dbName js-file-to-execute.js
    
    // js file contains copy command (db.collection.copyto('newCollection'))
    
    Run Code Online (Sandbox Code Playgroud)

对于较少的数据(< 200 k),它工作正常,但对于 200 万数据,它挂起 mongo 服务器并且作业因 Socket Exception 而失败

  • 使用 mongo 模板并执行查询

dbMongoTemplate.getDb().getCollection("collection").aggregate(Arrays.asList((DBObject) new BasicDBObject("$out","newCollection")));

这将执行一个 mongo 聚合查询 db.collection.aggregate({$out : "newCollection"})

这也适用于数据较少的集合,但对于较大的数据集,它会一直运行,直到发生套接字超时并最终使作业失败。

请建议复制数据的有效方法?

tej*_*zpr 5

//Fastest way to copy a Collection in MongoDB
db.getCollection('OriginalCollection').aggregate([ { $out: "ClonedCollection" } ]);
Run Code Online (Sandbox Code Playgroud)

此命令在大约 2-3 分钟内复制了 200 万条记录的集合。

https://gist.github.com/tejzpr/ff37324a8c26d13fef08c318278c0718