【发布时间】:2013-10-16 22:30:24
【问题描述】:
我需要在由 Grails 1.3.7 提供支持的应用中实现一些简单的聚合。 1.0.0.RC3 的 mongodb-plugin 随 gmongo 0.9.1 一起提供,其中未实现聚合函数。
我该如何解决这个问题?是否有任何钩子可以直接调用 java-mongo API,或者是否有其他一些允许聚合的插件版本?
TIA
【问题讨论】:
标签: grails groovy aggregation-framework gmongo
我需要在由 Grails 1.3.7 提供支持的应用中实现一些简单的聚合。 1.0.0.RC3 的 mongodb-plugin 随 gmongo 0.9.1 一起提供,其中未实现聚合函数。
我该如何解决这个问题?是否有任何钩子可以直接调用 java-mongo API,或者是否有其他一些允许聚合的插件版本?
TIA
【问题讨论】:
标签: grails groovy aggregation-framework gmongo
Mongo 聚合 API 似乎从 2.1 here 开始存在,可能您可能需要升级您的库。 这是 mongodb 插件documentation,它正在谈论访问低级 api。对于 grails 1.3.7,请参阅此 blog,了解有关如何将更多最新的 mongo 库添加到您的 Grails 应用程序的详细信息,此 post 似乎也有同样的问题。
希望对你有帮助。
【讨论】:
聚合仅适用于 GMongo 1.0+。
【讨论】:
嗯,用现有的 gmongo/mongo-GORM 似乎是不可能的。版本冲突太多:不同的 mongo java 驱动程序、不同的 groovy 版本等。我看到了很多 ClassNotFoundExceptions 等。
幸运的是我现在不需要聚合功能,所以我将等待并稍后升级到 grails 2.x 和 mongo-GORM 1.3++
【讨论】:
所以,我成功了!
流了一点血,我找到了一种在 gmongo 0.9.1 / mongodb 1.0.0.RC3 / Grails 1.3.7 中使用聚合的方法!
如何:
您需要将 mongo-java-driver 替换为较新的版本(我现在使用的是最新版本 2.9.3)。在 Grails 中它看起来像:
依赖{ 编译'org.mongodb:mongo-java-driver:2.9.3' }
在 BootStrap 或我的情况下 Plugin-descriptor 添加以下行:
DBCollectionPatcher.PATCHED_METHODS
聚合调用如下所示:
def res = Task.collection.aggregate( [ $group:[ _id:'totalTime', time:[ $sum:'$time' ] ] ], [] as DBObject ).results()
它就像一个魅力!
【讨论】: