【问题标题】:Aggregations in gmongo 0.9.1gmongo 0.9.1 中的聚合
【发布时间】: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


    【解决方案1】:

    Mongo 聚合 API 似乎从 2.1 here 开始存在,可能您可能需要升级您的库。 这是 mongodb 插件documentation,它正在谈论访问低级 api。对于 grails 1.3.7,请参阅此 blog,了解有关如何将更多最新的 mongo 库添加到您的 Grails 应用程序的详细信息,此 post 似乎也有同样的问题。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      聚合仅适用于 GMongo 1.0+。

      【讨论】:

        【解决方案3】:

        嗯,用现有的 gmongo/mongo-GORM 似乎是不可能的。版本冲突太多:不同的 mongo java 驱动程序、不同的 groovy 版本等。我看到了很多 ClassNotFoundExceptions 等。

        幸运的是我现在不需要聚合功能,所以我将等待并稍后升级到 grails 2.x 和 mongo-GORM 1.3++

        【讨论】:

          【解决方案4】:

          所以,我成功了!

          流了一点血,我找到了一种在 gmongo 0.9.1 / mongodb 1.0.0.RC3 / Grails 1.3.7 中使用聚合的方法!

          如何:

          1. 您需要将 mongo-java-driver 替换为较新的版本(我现在使用的是最新版本 2.9.3)。在 Grails 中它看起来像:

            依赖{ 编译'org.mongodb:mongo-java-driver:2.9.3' }

          2. 在 BootStrap 或我的情况下 Plugin-descriptor 添加以下行:

            DBCollectionPatcher.PATCHED_METHODS

          3. 聚合调用如下所示:

            def res = Task.collection.aggregate( [ $group:[ _id:'totalTime', time:[ $sum:'$time' ] ] ], [] as DBObject ).results()

          它就像一个魅力!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-03
            • 1970-01-01
            • 2015-10-21
            • 1970-01-01
            • 2011-09-08
            相关资源
            最近更新 更多