【问题标题】:grails gorm mongodb `like` functionality in criteria标准中的grails gorm mongodb`like`功能
【发布时间】:2015-10-23 12:57:45
【问题描述】:

是否支持 likerlike 在集合的属性值中搜索字符串?
集合是否需要为此工作定义文本类型索引?不幸的是,我无法为该属性创建文本索引。有 1 亿个文档和文本索引杀死了性能(MongoDB 在单节点上)。
如果没有文本索引就无法做到这一点,那对我来说没问题。我会寻找替代品。

给出以下集合:

Message {
    'payload' : 'XML or JSON string' 
    //few other properties
}

在 grails 中,我创建了一个 Criteria 来返回一个文档列表,其中包含有效负载中的特定字符串

Message.list {
  projections {
    like('payload' : searchString)
  }
}

我也尝试过使用rlike('payload' : ".*${searchString}.*")。它没有给我带来任何文档。

注意:当我在 Mongo shell 上触发本机查询时,我能够获取文档。

db.Message.find({payload : { $regex : ".*My search string.*" }}).pretty()

【问题讨论】:

    标签: grails grails-orm gorm-mongodb


    【解决方案1】:

    我得到了它的工作方式。我相信有一个更好的 grails 解决方案。标准方法不起作用。因此使用低级 API 将 DBObjects 转换为 Domain 对象。

            def query = ['payload' : [ '$regex' : /${searchString}/ ]  ]
            def dbObjects = Message.collection.find(query).skip(offset).limit(defaultPageSize).toArray()
            dbObjects?.collect { new Message(new JsonSlurper().parseText(it.toString()))}
    

    【讨论】:

      猜你喜欢
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2014-03-15
      • 2012-09-11
      • 2013-02-07
      • 2015-10-20
      • 1970-01-01
      相关资源
      最近更新 更多