【问题标题】:Got unauthorized error when renaming mongodb collection重命名 mongodb 集合时出现未经授权的错误
【发布时间】:2013-05-02 17:53:11
【问题描述】:

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

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

不使用管理数据库也能正常工作。

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

oldCollection.rename(newCollectionName);

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

【问题讨论】:

  • 我希望你不要经常这样做。在这种情况下,为什么不用注释 @Document(collection = "NAME_OF_YOUR_NEW_COLLECTION") 重命名数据模型。这应该负责重命名集合。
  • 我需要能够使用 java 代码来做到这一点,因为这来自动态的用户操作。因此,使用注释可能无济于事。

标签: mongodb mongodb-java mongohq


【解决方案1】:

在 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”db,我得到了以下错误堆栈:

{ "serverUsed" : "localhost/127.0.0.1:27017" , 
"errmsg" : "exception: invalid collection name: NEW_NAME" , "code" : 15967 , "ok" : 0.0}

奇怪的是有如此不同的行为......

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2014-11-03
    相关资源
    最近更新 更多