重命名mongodb集合时出现未经授权的错误

时间:2013-05-02 17:53:12

标签: mongodb mongodb-java mongohq

我正在使用mongohq沙箱计划。在命令提示符中,

db["oldCollectionName"].renameCollection("newCollectionName", true)

在不使用管理员数据库的情况下正常工作。

但是,当我在Java中执行此操作时,我遇到了“未经授权”的异常:

oldCollection.rename(newCollectionName);

由于我使用的是mongohq沙盒计划,因此我无权访问admin数据库。有没有办法在不创建新集合的情况下重命名此集合,复制所有文档并删除旧集合?

1 个答案:

答案 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}

奇怪的是有这样不同的行为......