我想克隆一个 MongoDB 集合并将其保存在具有不同名称的同一服务器上。例如,现在我有以下集合:demo1.categories、demo1.users 和 demo2.users。
我想要一个与“demo1.categories”相同的“demo2.categories”。(它只是有一个不同的名称。)
我想克隆一个 MongoDB 集合并将其保存在具有不同名称的同一服务器上。例如,现在我有以下集合:demo1.categories、demo1.users 和 demo2.users。
我想要一个与“demo1.categories”相同的“demo2.categories”。(它只是有一个不同的名称。)
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)} );
最简单有效的方法是使用copyTo(),因此您可以使用:
db.source.copyTo("target");
& 如果"target"
不存在,将被创建
- 更新 -
根据CopyTo Documentation,因为copyTo()
在内部使用 eval ,所以复制操作将阻塞 mongod 实例上的所有其他操作。所以它不应该在生产环境中使用。
- 更新 -
因为在内部CopyTo()
使用&自 3.0 版起已弃用,所以自 3.0 版起也已弃用。eval()
eval()
CopyTo()
这是克隆您的收藏的最快方法:
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
最快的选择是
db.myoriginal.aggregate([ { $out: "mycopy" } ])
已经有一个命令。
将单个集合从一台服务器复制到另一台服务器。 http://www.mongodb.org/display/DOCS/cloneCollection+Command
如果您担心速度,那么我发现使用aggregate
with$project
和$out
to 可以快 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
不要使用db.cloneCollection()
方法,它是从当前版本折旧的,4.2
而是尝试使用mongoexport
.
在 mongo 控制台中,您也可以执行以下操作,其中 db_host 是 db_host 具有要克隆的集合的数据库的机器。
使用 db.cloneCollection(, )