2012-10-05 23 views
3

我試圖用建立在Grails的一個MongoDB的集合創建Grails中一個MongoDB的集合:嘗試使用MongoDB的插件

BasicDBObject DBoptions = new BasicDBObject(); 
DBCollection collection = db.createCollection("xyz",DBoptions) 

,但我得到了以下錯誤:

Caused by GroovyRuntimeException: Ambiguous method overloading for method com.mongodb.DBApiLayer#createCollection.  
Cannot resolve which method to invoke for [class java.lang.String, class com.mongodb.BasicDBObject] 
due to overlapping prototypes between: 
[class java.lang.String, interface com.mongodb.DBObject] 
[class java.lang.String, interface java.util.Map] 

任何想法上如何解決這個問題?

感謝

+0

什麼的Grails的版本?你使用mongo插件?哪一個,哪個版本? –

+0

grails 2.1.1和mongodb:1.0.0.GA – user1723354

+0

我發現實際上可以調用DBCollection collection = db.getCollection(「xyz」),它隱式爲你創建集合,如果它不存在 – user1723354

回答

3

我遇到了類似的問題,試圖從一個Grails服務類運行時使用可用的命令()函數蒙戈司機來了。

每次我嘗試創建一個DBObject並將其傳遞到command()函數時,我會收到一個錯誤,抱怨com.mongodb.DBObject和java.util.interfaces之間的重疊原型。例如試圖創建一個使用數據庫db.command()與數據庫對象的新副本會拋出一個錯誤...

DBObject cmd = new BasicDBObject() 
cmd.put("copydb", 1) 
cmd.put("todb", "to_database") 
cmd.put("fromdb", "from_database") 
mongo.getDB("admin").command(cmd) 

通過一點點線索/錯誤究竟是什麼結束了工作對我來說是不是創建一個DBObject的時候,我傳入了一個標準的groovy映射實例。我的猜測是,因爲DBObject使用java.util.Map接口,所以兩者應該大部分可以互換。下面的代碼最終爲我工作..

def cmd = [ copydb: 1, "todb": "to_database", "fromdb": "from_database" ] 
mongo.getDB("admin").command(cmd) 

聽起來你周圍發現另一部作品,但如果你在地圖中的選項參數db.createCollection(通過我會好奇),而不是一個BasicDBObject的如果它能工作。

不管怎麼說希望這可以幫助人在那裏誰可能會掙扎着試圖讓一些其他蒙戈API函數裏面Grails的工作...

+0

@cengerbretson Din' t爲我工作.. :(它爲原始問題的作者嗎?我已經發布我的情況在問題http://stackoverflow.com/questions/25545865/randomly-getting-capped-collection-error-in-tests – TechSpellBound

相關問題