是否支持like
或rlike
来搜索集合属性值中的字符串?
集合是否需要为此定义文本类型索引?不幸的是我无法为该属性创建文本索引。有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()
答案 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()))}