Grails Gorm MongoDB索引嵌入式字符串映射

时间:2012-03-01 19:23:04

标签: grails mongodb groovy gorm

我想用休息服务制作一些可翻译的内容,所以我决定使用这种结构创建集合。但我无法通过String Map中的值找到BSON。     class LocalizableString {

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

然后我想要这样。但它就像连接查询一样。

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

这是类似的简单mongo示例。但是如何使用gorm mongoDB http://www.mongodb.org/display/DOCS/Schema+Design#SchemaDesign-Example

实现它

有没有解决方案?

2 个答案:

答案 0 :(得分:1)

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
   }
 }

答案 1 :(得分:0)

我不是百分之百,但我相当肯定Mongo GORM插件使用标准关系遍历,这就是的样子 (尽管不是那样)。

来自mongoGorm网站(http://blog.mongodb.org/post/18510469058/grails-in-the-land-of-mongodb):

  

一些不受支持的GORM功能包括:

     

标准查询关联

     

HQL

     

Groovy SQL

所以你可能需要重新考虑你在这里作为数据模型的地图结构:/更有经验的人可以权衡吗?