我想用休息服务制作一些可翻译的内容,所以我决定使用这种结构创建集合。但我无法通过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
实现它有没有解决方案?
答案 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
所以你可能需要重新考虑你在这里作为数据模型的地图结构:/更有经验的人可以权衡吗?