2013-05-02 4 views
2

Я использую план песочницы mongohq. В командной строкеПолучил несанкционированную ошибку при переименовании коллекции mongodb

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

работает нормально, не используя базу данных администратора.

Однако, я получил «несанкционированное» исключение, когда я делаю это в Java:

oldCollection.rename(newCollectionName); 

Поскольку я использую план MongoHQ песочницы, у меня нет доступа к базе данных администратора. Есть ли способ переименовать эту коллекцию без создания новой коллекции, копирования всех документов и удаления старой коллекции?

+0

Надеюсь, вы бы этого не делали часто. В этом случае почему бы не переименовать модель данных с аннотацией @Document (collection = "NAME_OF_YOUR_NEW_COLLECTION"). Это должно позаботиться о переименовании коллекции. –

+0

Мне нужно сделать это с помощью java-кода, потому что это происходит от действий пользователя динамически. Поэтому использование аннотации может не помочь. – coolsuntraveler

ответ

0

В Java и с помощью Джонго вы можете сделать следующее:

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}"); 

я получить ту же ошибку, у вас есть.

Я прочитал от некоторых документов, вы должны подключить первую в базу данных администратора обрабатывать некоторые команды не допускаются, поэтому я сделал то же самое, но с «админ» дб, и я получаем следующий стек ошибок:

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

Странно иметь такое поведение ...