db.runCommand({cloneCollection : "newdb.rep", from:"localhost:27017"})
我现在已连接到远程Mongo实例。 但是我知道这主要用于将集合从远程复制到本地而不是相反的方式
答案 0 :(得分:1)
您可以使用此脚本,该脚本将连接到本地和远程数据库。
一些信息here
然后通过集合进行迭代并插入1000个文档中。
var localConnection = connect("localhost:27017/myDatabase");
var destinationConnection = connect("localhost:27020/myDatabase");
var documentLimit = 1000;
var docCount = localConnection.find({}).count();
var chunks = docCount / documentLimit;
for (var i = 0; i <= chunks; i++) {
var bulk = destinationConnection.initializeUnorderedBulkOp();
localConnection .find({}).snapshot()
.limit(documentLimit).forEach(function (doc) {
bulk.insert(doc);
});
bulk.execute()
}
答案 1 :(得分:0)
@ profesor79的脚本不适用于较新版本的MongoDB,并且不适用于包含1000多个文档的集合,并且没有进行任何更改。它不使用skip(),因此MongoDB在尝试再次覆盖前1000个文档时会引发错误。
我已成功在包含约20000个文档的集合上使用以下脚本。
var localConnection = connect(
"<db_user>:<db_password>@localhost:27017/<db_name>"
);
var destinationConnection = connect(
"<db_user>:<db_password>@<remote_host>:<remote_port>/<remote_db>"
);
var documentLimit = 1000;
var docCount = localConnection.collection_name.count();
var chunks = docCount / documentLimit;
for (var i = 0; i <= chunks; i++) {
var bulk = destinationConnection.collection_name.initializeUnorderedBulkOp();
localConnection.collection_name
.find({})
// after each iteration skip 1000, 2000 and so on...
.skip(i*documentLimit)
.limit(documentLimit)
.forEach(function(doc) {
bulk.insert(doc);
});
bulk.execute();
}
提供您自己的本地和目标连接字符串以及documentLimit(即要作为大块处理的文档数),并且应该可以正常工作。