尝试使用 mongodb 插件在 grails 中创建 mongodb 集合
Posted
技术标签:
【中文标题】尝试使用 mongodb 插件在 grails 中创建 mongodb 集合【英文标题】:Trying to create a mongodb collection in grails using mongodb plugin 【发布时间】:2012-09-26 18:13:47 【问题描述】:我正在尝试使用以下方法在 grails 中创建一个 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]
关于如何解决这个问题的任何想法?
谢谢
【问题讨论】:
什么版本的 Grails?你使用 mongo 插件?哪个,哪个版本? grails 2.1.1 和 mongodb:1.0.0.GA 我发现实际上可以调用 DBCollection collection = db.getCollection("xyz") 如果它不存在,它会为您隐式创建集合 【参考方案1】:我在从 grails 服务类运行时尝试使用可用于 mongo 驱动程序的 command() 函数时遇到了类似的问题。
每次我尝试创建一个 DBObject 并将其传递给 command() 函数时,我都会收到一个错误,抱怨 com.mongodb.DBObject 和 java.util.interfaces 之间的原型重叠。例如,尝试使用带有 DB 对象的 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 是否可行,我会很好奇。
无论如何,希望这对那些可能正在努力让其他一些 mongo api 函数在 grails 中工作的人有所帮助......
【讨论】:
@cengerbretson 对我不起作用.. :( 它对原始问题作者有用吗?我已经在问题***.com/questions/25545865/… 中发布了我的场景以上是关于尝试使用 mongodb 插件在 grails 中创建 mongodb 集合的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 mongodb 插件版本 3.0.3 运行 Grails 应用程序