有什么简单的方法吗?


当前回答

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

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

其他回答

我通常会这样做:

use sourcedatabase;
var docs=db.sourcetable.find();
use targetdatabase;
docs.forEach(function(doc) { db.targettable.insert(doc); });

您可以使用聚合框架解决您的问题

db.oldCollection.aggregate([{$out : "newCollection"}])

需要注意的是,oldCollection中的索引不会复制到newCollection中。

从现有的MongoDB atlas cluster DB导入数据最简单的方法是使用MongoDB & mongorestore命令。

要从现有的DB中创建转储,您可以使用:

mongodump --uri="<connection-uri>"

还有其他连接选项,可以在这里查找:https://www.mongodb.com/docs/database-tools/mongodump/

在dump/目录中成功创建转储后,您可以使用导入数据到您的其他db,如下所示:

mongorestore --uri="<connection-uri-of-other-db>" <dump-file-location>

类似地,对于mongorestore,还有其他连接选项,可以在命令中查找以恢复特定的集合: https://www.mongodb.com/docs/database-tools/mongorestore/

转储文件的位置将在转储目录中。可能存在与您转储的DB名称相同的子目录。例如,如果您转储了测试数据库,那么转储文件的位置将是/dump/test

这并不能解决你的问题,但是mongodb shell有一个copyTo方法,可以将一个集合复制到同一个数据库中的另一个集合:

db.mycoll.copyTo('my_other_collection');

它还可以从BSON转换为JSON,所以mongodb /mongorestore是最好的方式,就像其他人说的那样。

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

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

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