Grails中的动态MongoDb查询
我在Grails中有一个类似的域Grails中的动态MongoDb查询,grails,mongodb,gorm,Grails,Mongodb,Gorm,我在Grails中有一个类似的域 class User { static mapWith = "mongo" ObjectId id String name String address Integer age } 我正在Grails中构建一个搜索前端,以使用。可以对数据库中的任何字段进行搜索,并且查询中不得使用用户未设置的任何字段。即,不得将任何字段与null进行比较。例如,将所有字段留空将返回所有用户,但搜索name只返回与name匹配的文档 最初
class User {
static mapWith = "mongo"
ObjectId id
String name
String address
Integer age
}
我正在Grails中构建一个搜索前端,以使用。可以对数据库中的任何字段进行搜索,并且查询中不得使用用户未设置的任何字段。即,不得将任何字段与null进行比较。例如,将所有字段留空将返回所有用户,但搜索name
只返回与name
匹配的文档
最初我的查询很简单,我使用User.find(newuser(params))代码>在我的控制器中运行良好。现在,我还需要能够使用大于和小于的间隔查询整数字段。我已经研究了withCriteria()
,并根据用户设置的字段来构建查询,但到目前为止,我没有成功
TL;DR
如果我不知道用户希望在查询中包含哪些字段,如何进行查询?我使用withCriteria()
解决了这个问题,如下所示:
def c = User.createCriteria()
def users = c.list {
if(params.name)
eq('name', params.name)
if(params.address)
eq('address', params.address)
if(params.age_gt?.isInteger())
gt('age', params.age_gt as Integer)
if(params.age_lt?.isInteger())
lt('age', params.age_lt as Integer)
}
我使用withCriteria()
解决了这个问题,如下所示:
def c = User.createCriteria()
def users = c.list {
if(params.name)
eq('name', params.name)
if(params.address)
eq('address', params.address)
if(params.age_gt?.isInteger())
gt('age', params.age_gt as Integer)
if(params.age_lt?.isInteger())
lt('age', params.age_lt as Integer)
}