在MongoDB中克隆一个集合

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

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

然而, MongoDB的文档又来了

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

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

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

 db.source.copyTo("target"); 

如果"target"不存在,它将被创build

– 更新 –

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

– 更新 –

由于CopyTo()内部使用eval() ,因此从3.0版开始不推荐使用eval() ,所以CopyTo()从版本3.0开始也被弃用。

这是克隆你的collections最快的方法:

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

它会将db_name中的src_collection克隆到dst_collection 。 或者你可以在BBS层面上分两步进行:

 mongodump -d db_name -c src_collection mongorestore --drop -d db_name -c dst_collection ./dump/db_name/src_collection.bson 

最快的select是

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

已经有一个这样的命令。

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

如果你关心速度,那么我发现通过使用$project$out aggregate速度快100倍,不知道是否有限制,但你必须创build一个你想要的字段复制例如:

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

这将从demo1.categories复制( demo1.categories所有文档的选定字段demo1.categoriesdemo2.categories

在mongo控制台中,也可以执行以下操作,其中db_host是db_host具有要克隆的集合的db的计算机。

使用db.cloneCollection(,)