Агрегации в гмонго 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!
КАК:
вам нужно заменить mongo-java-driver более новой версией (я использовал самую последнюю на данный момент версию 2.9.3). В Grails это выглядит так:
зависимостей { compile 'org.mongodb:mongo-java-driver:2.9.3' }
В BootStrap или в моем случае Plugin-descriptor добавьте следующую строку:
DBCollectionPatcher.PATCHED_METHODS << 'агрегат'
Вызов агрегации выглядит так:
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/mongo-GORM. Слишком много версий версий: разные java-драйверы mongo, разные отличные версии и т. Д. Я видел много исключений ClassNotFoundException и тому подобное.
К счастью, мне сейчас не нужна функциональность агрегирования, поэтому я просто подожду и позже обновлюсь до Grails 2.x и mongo-GORM 1.3++