在MongoDB中克隆一个集合

时间:2012-01-19 21:08:20

标签: mongodb

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

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

8 个答案:

答案 0 :(得分:79)

再次MongoDB documentation comes to the rescue

假设该集合实际上名为“demo1.categories”:

db.demo1.categories.find().forEach( function(x){db.demo2.categories.insert(x)} );

答案 1 :(得分:29)

最简单的&有效的方法是使用copyTo(),所以你可以使用:

db.source.copyTo("target"); 

&安培;如果"target"不存在,则会创建

- 更新 -

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

- 更新 -

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

答案 2 :(得分:24)

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

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

答案 3 :(得分:14)

最快的选择是

db.myoriginal.aggregate([ { $out: "mycopy" } ])

答案 4 :(得分:2)

已经有了这个命令。

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

答案 5 :(得分:2)

如果您关注速度,我发现使用aggregate$project$out的速度要快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的所有文档的选定字段集

答案 6 :(得分:0)

不要使用db.cloneCollection()方法,它会从当前版本4.2开始贬值,而是尝试使用mongoexport

depreciated collection method

答案 7 :(得分:-2)

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

使用 db.cloneCollection(,)