标准中的grails gorm mongodb`like`功能

时间:2015-07-31 18:46:11

标签: grails gorm gorm-mongodb

是否支持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()

1 个答案:

答案 0 :(得分:1)

I got it working in a round about way. I believe there is a much better grails solution. Criteria approach did not work. So used the low level API converted the DBObjects to Domain objects.

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