Grails 1.3.7 を搭載したアプリにいくつかの単純な集計を実装する必要があります。1.0.0.RC3 の mongodb-plugin には、集約関数が実装されていない gmongo 0.9.1 が同梱されています。
どうすれば問題を解決できますか? java-mongo API を直接呼び出すためのフックはありますか、それとも集約を可能にする他のプラグイン リリースがあるのでしょうか?
ティア
Grails 1.3.7 を搭載したアプリにいくつかの単純な集計を実装する必要があります。1.0.0.RC3 の mongodb-plugin には、集約関数が実装されていない gmongo 0.9.1 が同梱されています。
どうすれば問題を解決できますか? java-mongo API を直接呼び出すためのフックはありますか、それとも集約を可能にする他のプラグイン リリースがあるのでしょうか?
ティア
Mongo 集約 API は 2.1 hereから存在しているようです。おそらく、ライブラリをアップグレードする必要があるかもしれません。これは、低レベルのAPIへのアクセスについて話しているmongodbプラグインのドキュメントです。Grails 1.3.7の場合、Grails アプリケーションに最新の mongo ライブラリを追加する方法の詳細については、このブログを参照してください。この投稿には同じ問題があるようです。
それが役に立てば幸い。
まぁ、既存のgmongo/mongo-GORMでは無理そうです。バージョンの衝突が多すぎます。異なる mongo Java ドライバー、異なる groovy バージョンなどです。多くの ClassNotFoundExceptions などを見ました。
幸いなことに、現時点では集計機能は必要ないので、待ってから grails 2.x と mongo-GORM 1.3++ にアップグレードします。
集約は GMongo 1.0 以降でのみ機能します。
それで、私はそれを作りました!
少量の流血で、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()
そしてそれは魅力のように機能します!