我正在使用mongohq沙箱计划。在命令提示符中,
db["oldCollectionName"].renameCollection("newCollectionName", true)
在不使用管理员数据库的情况下正常工作。
但是,当我在Java中执行此操作时,我遇到了“未经授权”的异常:
oldCollection.rename(newCollectionName);
由于我使用的是mongohq沙盒计划,因此我无权访问admin数据库。有没有办法在不创建新集合的情况下重命名此集合,复制所有文档并删除旧集合?
答案 0 :(得分:0)
在Java中使用Jongo,您可以执行以下操作:
MongoCollection col = new Jongo(DbConfigurer.getDB()).getCollection("CODE");
col.getDBCollection().rename("CODE45", true);
我刚刚测试过它。
现在在以下示例中使用'runCommand'(与使用db.command相同):
DB db = ....getDB();
Jongo jongo = new Jongo(db);
jongo.runCommand("{ renameCollection : 'OLD_NAME', to: 'NEW_NAME', dropTarget: true}");
我得到了同样的错误。
我从一些文档中读到你必须首先连接到admin数据库来处理一些不允许的命令,所以我做了同样但是使用“admin”db,我获得了以下错误堆栈:
{ "serverUsed" : "localhost/127.0.0.1:27017" ,
"errmsg" : "exception: invalid collection name: NEW_NAME" , "code" : 15967 , "ok" : 0.0}
奇怪的是有这样不同的行为......