我想克隆MongoDB集合并将其保存在具有不同名称的同一服务器上。例如,我现在有以下集合:demo1.categories,demo1.users和demo2.users。
我想要一个“demo2.categories”,它与“demo1.categories”相同。 (它只是有一个不同的名字。)
答案 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.categories
到demo2.categories
的所有文档的选定字段集
答案 6 :(得分:0)
不要使用db.cloneCollection()
方法,它会从当前版本4.2
开始贬值,而是尝试使用mongoexport
。
答案 7 :(得分:-2)
在mongo控制台中,您也可以执行以下操作,其中db_host是db_host具有您要克隆的集合的数据库的机器。
使用 db.cloneCollection(,)