尝试使用 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 应用程序

如何在 grails 2.4.4 中使用 mongodb?

在 grails 中迁移 mongodb 插件时发生异常

如何更改生成表中的列顺序(grails 约束不适用于 mongodb 插件)

Grails MongoDB 插件:嵌入式集合与引用

Grails GORM MongoDB。父模型类的问题