我正在尝试使用以下方法在 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]
关于如何解决这个问题有什么想法吗?
Thanks
当从 grails 服务类运行时,我在尝试使用 mongo 驱动程序可用的 command() 函数时遇到了类似的问题。
每次我尝试创建一个 DBObject 并将其传递到 command() 函数时,我都会收到一个错误,抱怨 com.mongodb.DBObject 和 java.util.interfaces 之间的原型重叠。例如,尝试使用 db.command() 和 DB 对象创建数据库的新副本会引发该错误...
DBObject cmd = new BasicDBObject()
cmd.put("copydb", 1)
cmd.put("todb", "to_database")
cmd.put("fromdb", "from_database")
mongo.getDB("admin").command(cmd)
通过一些小线索/错误,最终对我有用的是,我传递了一个标准的常规地图实例,而不是创建 DBObject。我的猜测是,由于 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 中工作的人......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)