【问题标题】:Using aggregation framework of mongodb in grails在grails中使用mongodb的聚合框架
【发布时间】:2014-06-06 06:25:59
【问题描述】:

我的应用程序位于grails 2.3.7 中,我使用mongodb 作为数据存储。我有一个用例,我需要使用aggregation framework 从数据库中获取和过滤数据。我可以使用 java mongodb 驱动程序轻松地做到这一点。但是如何使用 mongodb grails 插件来实现相同的目标?我能够获取数据并应用标准来过滤掉结果。但我无法运行聚合管道。有什么线索吗?

【问题讨论】:

    标签: java mongodb grails aggregation-framework


    【解决方案1】:

    版本的mongo插件。 3.0.0 应该有aggregation 支持。 如果您有一些限制,请查看如何在 Grails pre-2.x 版本中启用 aggregation Aggregations in gmongo 0.9.1

    【讨论】:

    • 3.0.0 聚合支持的文档在哪里?我刚刚检查了文档,虽然他们说它包含在内,但是新功能如何工作的信息完全为零!如此典型的 Grails Mongo 插件 facepalm
    • 聚合支持的文档可以在 mongo 站点找到(还有哪里?)。在您的 groovy 代码中,您必须使用“低级表示法”YourDomain.collection.aggregate( [:], [:] )
    • 通过在他们的更改日志中引用“支持使用 MongoDB 聚合的投影”,听起来他们开发的东西比 GMongo 已经做了。如果这真的是全部,那么关于这真正意味着什么的一些细节就是所需要的(即聚合框架参见 GMongo)来消除混乱。访问 MongoDB 站点以了解应该如何使用 Groovy 库是轻率的建议。正确的地方是 GMongo 文档,因为我需要知道如何从 Groovy 而不是 Javascript 调用聚合。
    【解决方案2】:

    您的操作与在 Java 中的操作完全相同。在控制器中,如果您添加 Mongo 类型为 com.mongodb.Mongo 的字段,它将被自动注入,然后您只需使用与驱动程序相同的 API 来执行您想要的任何聚合:

    Mongo mongo
    def testMongo() {
       DB myDb = mongo.getDB("foo")
       // do stuff with DB
    }
    

    【讨论】:

    • 是的,我现在正在这样做。但我想知道这是否会导致每个请求都获得数据库连接。假设我将它添加到控制器中。我不希望每次收到请求时都获取新的数据库连接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2015-06-09
    相关资源
    最近更新 更多