这个问题就像MongoDB - copy collection in java without looping all items 但是,使用Java MongoDB驱动程序解决问题并不清楚。
我想将一个集合的一部分从远程mongodb复制到本地mongodb。远程使用ssh并作为端口27018进行寻址。
在mongodb shell中运行它:
C:\mongodb\bin>mongo
MongoDB shell version: 2.4.9
connecting to: test
> var db2 = connect("localhost:27018/github");
connecting to: localhost:27018/github
> var db1 = connect("localhost:27017/github");
connecting to: localhost:27017/github
但是,Java中的相同内容会产生此错误:
错误:本地Mongo构造函数在src / mongo / shell / mongo.js中没有args:147
Java code snippet:
logger.debug("Starting mongo shell execution.");
final MongoClient Client = newMongoClient(host.getStringValue(), port.getIntValue());
final DB db = connectDB(Client, dB.getStringValue(), false);
logger.debug("Mongo execution script: " + script.getStringValue());
logger.info("Mongo execution result: " + db.eval(script.getStringValue()));
使用eval:
执行脚本var db2 = connect("localhost:27018/github");
db2.getMongo().setSlaveOk();
var db1 = connect("localhost:27017/github");
如果将其作为脚本运行,也会发生同样的错误。 我还将它作为服务器脚本运行,基于:http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/
将脚本保存在服务器上,然后执行:
db.system.js.save(
{ _id: "KScript",
value: function() {
var db2 = connect("localhost:27018/github");
db2.getMongo().setSlaveOk();
var db1 = connect("localhost:27017/github");
}
}
)
db.eval("KScript()")
db.system.js.remove( { "_id" : "KScript" } );
在基于Java的eval或服务器脚本中,错误是相同的: 错误:本地Mongo构造函数在src / mongo / shell / mongo.js中没有args:147
然而,在mongodb shell中,它可以工作。
有什么想法吗?