有什么简单的方法吗?


当前回答

这可以使用Mongo的db来完成。copyDatabase方法:

db.copyDatabase(fromdb, todb, fromhost, username, password)

参考:http://docs.mongodb.org/manual/reference/method/db.copyDatabase/

其他回答

这可能只是一个特殊情况,但对于一个包含100k文档的集合,其中包含两个随机字符串字段(长度为15-20个字符),使用哑mapreduce几乎是find-insert/copyTo速度的两倍:

db.coll.mapReduce(function() { emit(this._id, this); }, function(k,vs) { return vs[0]; }, { out : "coll2" })

使用“Studio3T for MongoDB” 通过单击数据库,集合或特定的集合具有导出和导入工具 下载链接:https://studio3t.com/download/

有不同的方法来进行集合复制。注意,复制可以发生在同一个数据库、不同的数据库、分片数据库或mongod实例中。有些工具对于大型集合的复制是有效的。

使用$merge聚合: 将聚合管道的结果写入指定的集合。注意,复制可以跨数据库进行,甚至可以跨分片集合进行。创建一个新的集合或替换现有的集合。4.2新版功能。 例子:db.test。聚合([{$merge: {db: "newdb", coll: "newcoll"}}])

带$out的聚合: 将聚合管道的结果写入指定的集合。注意,复制只能在同一个数据库中进行。创建一个新的集合或替换现有的集合。 例子:db.test。聚合([{$out: "newcoll"}])

Mongoexport和mongoimport: 这些是命令行工具。 mongoexport生成集合数据的JSON或CSV导出。导出的输出使用mongoimport作为目标集合的源。

mongodb和mongorestore: 这些是命令行工具。 mongodb实用程序用于创建数据库或集合内容的二进制导出。mongorestore程序从mongodump创建的二进制数据库转储中加载数据到目标。

db.cloneCollection (): 将一个集合从远程mongod实例复制到当前mongod实例。 4.2版后已移除。

db.collection.copyTo (): 将所有文档从集合复制到新集合(在同一数据库中)。 3.0版后已移除。从4.2版开始,MongoDB此命令无效。

注意:除非上面的命令是从mongo shell运行的。

参考:MongoDB手册。

您也可以使用最喜欢的编程语言(如Java)或环境(如NodeJS),使用适当的驱动程序软件编写程序来执行复制-这可能涉及使用查找和插入操作或其他方法。这个查找-插入也可以从mongo shell执行。

您还可以使用像MongoDB Compass这样的GUI程序进行集合复制。

如果RAM不是问题,使用insertMany比forEach循环快得多。

var db1 = connect('<ip_1>:<port_1>/<db_name_1>')
var db2 = connect('<ip_2>:<port_2>/<db_name_2>')

var _list = db1.getCollection('collection_to_copy_from').find({})
db2.collection_to_copy_to.insertMany(_list.toArray())

这可以使用Mongo的db来完成。copyDatabase方法:

db.copyDatabase(fromdb, todb, fromhost, username, password)

参考:http://docs.mongodb.org/manual/reference/method/db.copyDatabase/