59

我想克隆一个 MongoDB 集合并将其保存在具有不同名称的同一服务器上。例如,现在我有以下集合:demo1.categories、demo1.users 和 demo2.users。

我想要一个与“demo1.categories”相同的“demo2.categories”。(它只是有一个不同的名称。)

4

8 回答 8

83

Yet again the MongoDB documentation comes to the rescue

assuming that the collection actually is named "demo1.categories":

db.demo1.categories.find().forEach( function(x){db.demo2.categories.insert(x)} );
于 2012-01-19T21:45:00.887 回答
31

最简单有效的方法是使用copyTo(),因此您可以使用:

db.source.copyTo("target"); 

& 如果"target"不存在,将被创建

- 更新 -

根据CopyTo Documentation,因为copyTo()在内部使用 eval ,所以复制操作将阻塞 mongod 实例上的所有其他操作。所以它不应该在生产环境中使用。

- 更新 -

因为在内部CopyTo()使用&自 3.0 版起已弃用,所以自 3.0 版起也已弃用。eval()eval()CopyTo()

于 2014-01-19T17:43:51.140 回答
28

这是克隆您的收藏的最快方法:

mongoexport -d db_name -c src_collection | mongoimport -d db_name -c dst_collection --drop

它将db_name中的src_collection克隆到dst_collection。或者您可以在 bson 级别分两步完成:

mongodump -d db_name -c src_collection
mongorestore --drop -d db_name -c dst_collection ./dump/db_name/src_collection.bson
于 2014-07-25T21:31:01.847 回答
20

最快的选择是

db.myoriginal.aggregate([ { $out: "mycopy" } ])
于 2016-06-17T19:52:51.040 回答
2

已经有一个命令。

将单个集合从一台服务器复制到另一台服务器。 http://www.mongodb.org/display/DOCS/cloneCollection+Command

于 2012-05-30T01:26:08.587 回答
2

如果您担心速度,那么我发现使用aggregatewith$project$outto 可以快 100 倍,但不确定是否有限制,但您必须创建一组要复制的字段 例如:

// Set of fields in the categories collection
var setOfFields = {field1:1, field2:1.......}
db.demo1.categories.aggregate([{ "$project": setOfFields},{ $out: "demo2.categories"}]);

这会将所有文档的选定字段集复制(投影)demo1.categoriesdemo2.categories

于 2015-07-02T18:13:55.840 回答
0

不要使用db.cloneCollection()方法,它是从当前版本折旧的,4.2而是尝试使用mongoexport.

折旧收款方式

于 2020-01-23T09:08:22.353 回答
-4

在 mongo 控制台中,您也可以执行以下操作,其中 db_host 是 db_host 具有要克隆的集合的数据库的机器。

使用 db.cloneCollection(, )

于 2012-08-09T15:33:12.947 回答