Grails Gorm MongoDB index Строковая карта строк - PullRequest
1 голос
/ 01 марта 2012

Я хотел создать переводимый контент с сервисом отдыха, поэтому решил создать коллекцию с этой структурой. Но я не могу найти BSON по значению из String Map. class LocalizableString {

   static mapWith = "mongo"
   ObjectId id
   Map<String, String> values = new HashMap<String, String>();
}

Тогда я хотел стать таким. Но это работает как запрос на соединение.

def list = LocalizableString.createCriteria().list {
        values{ like('value',"%${value}%") }
    }

Вот аналогичный простой пример монго. Но как я могу реализовать это с помощью gorm mongoDB http://www.mongodb.org/display/DOCS/Schema+Design#SchemaDesign-Example

Есть ли какое-то решение для этого?

Ответы [ 2 ]

1 голос
/ 03 марта 2012
class BaseService {

    def findByLocalizableString(def domainClass ,def query , def field ,def params = null) {

       def q = new BasicDBObject()
       def queryList = []
       def allowedLanguages = ConfigurationHolder.config.grails.localizableString.allowedLanguages
       allowedLanguages.each { locale ->
          queryList.add(new BasicDBObject("values.${locale}", new BasicDBObject('$regex', /.*${query}.*/)))
    }
       q.put('$or',queryList)
       def lsc = LocalizableString.collection.find(q)

       def list = lsc.hasNext() ? domainClass.createCriteria().list(params) {
          or {
              while (lsc.hasNext()) {
                  def n = lsc.next()
                  eq("${field}",n._id)
              }
          }
       } : null
       return list
   }
 }
0 голосов
/ 02 марта 2012

Я не на 100% в этом, но я вполне уверен, что плагин Mongo GORM не работает с обходом отношения критериев, как это выглядит (несмотря на не совсем так).

С сайта mongoGorm (http://blog.mongodb.org/post/18510469058/grails-in-the-land-of-mongodb):

Некоторые из функций GORM, которые не поддерживаются, включают:

Критерии запросов на ассоциации

HQL

Groovy SQL

Так что вам, возможно, придется переосмыслить структуру карты, имеющуюся здесь в качестве модели данных: / Кто-нибудь более опытный может взвесить?

...