2013-05-02 48 views
2

我正在使用mongohq沙箱計劃。在命令提示符下,重命名mongodb集合時出現未經授權的錯誤

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

無需使用管理數據庫即可正常工作。

但是,我得到了「未經授權」的例外,我做這在Java中時:

oldCollection.rename(newCollectionName); 

由於我使用的mongohq沙箱的計劃,我沒有訪問管理數據庫。有沒有辦法在不創建新集合的情況下重命名此集合,複製所有文檔並刪除舊集合?

+0

我希望你不會經常這樣做。在那種情況下,爲什麼不用註釋@Document(collection =「NAME_OF_YOUR_NEW_COLLECTION」)重命名數據模型。這應該照顧重命名集合。 – 2013-05-02 19:58:12

+0

我需要能夠用java代碼來做到這一點,因爲這是來自用戶操作的動態。因此,使用註釋可能沒有幫助。 – coolsuntraveler 2013-05-02 20:22:15

回答

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」的分貝,我得到如下錯誤堆棧:

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

奇怪有這種不同的行爲...