在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.categories
到demo2.categories
在mongo控制台中,也可以执行以下操作,其中db_host是db_host具有要克隆的集合的db的计算机。
使用db.cloneCollection(,)