Агрегации в гмонго 0.9.1

Мне нужно реализовать несколько простых агрегатов в моем приложении на основе Grails 1.3.7. Плагин mongodb 1.0.0.RC3 поставляется с gmongo 0.9.1, где агрегатные функции не реализованы.

Как я могу решить проблему? Существуют ли какие-либо хуки для прямого вызова API java-mongo, или, может быть, есть и другие выпуски плагинов, которые допускают агрегирование?

ТИА

4 ответа

Решение

Итак, я сделал это!

с небольшим количеством пролитой крови, я нашел способ использовать агрегаты в gmongo 0.9.1 / mongodb 1.0.0.RC3 / Grails 1.3.7!

КАК:

  1. вам нужно заменить mongo-java-driver более новой версией (я использовал самую последнюю на данный момент версию 2.9.3). В Grails это выглядит так:

    зависимостей { compile 'org.mongodb:mongo-java-driver:2.9.3' }

  2. В BootStrap или в моем случае Plugin-descriptor добавьте следующую строку:

    DBCollectionPatcher.PATCHED_METHODS << 'агрегат'

  3. Вызов агрегации выглядит так:

    def res = Task.collection.aggregate ([$ group: [_id: 'totalTime', время:[ $sum:'$time' ] ] ], [] как DBObject).results()

и это работает как шарм!

Похоже, что агрегирование apis Mongo существует начиная с версии 2.1, возможно, вам может потребоваться обновить библиотеки. Вот документация плагина mongodb, которая говорит о доступе к низкоуровневому API. Что касается Grails 1.3.7, вы можете найти в этом блоге подробности о том, как добавить более свежие библиотеки mongo в ваше приложение Grails, и эта публикация, похоже, имеет ту же проблему.

Надеюсь, поможет.

Агрегаты работают только в GMongo 1.0+.

Ну, кажется, это невозможно сделать с помощью существующего gmongo/mongo-GORM. Слишком много версий версий: разные java-драйверы mongo, разные отличные версии и т. Д. Я видел много исключений ClassNotFoundException и тому подобное.

К счастью, мне сейчас не нужна функциональность агрегирования, поэтому я просто подожду и позже обновлюсь до Grails 2.x и mongo-GORM 1.3++

Другие вопросы по тегам