2012-02-01 41 views
1

动态MongoDB的查询我在Grails的Grails中

class User { 
    static mapWith = "mongo" 

    ObjectId id 
    String name 
    String address 
    Integer age 
} 

我建立Grails中搜索前端使用MongoDb plugin查询MongoDB数据库与此类似域。可以在数据库中的任何字段上进行搜索,并且任何未由用户设置的字段都不能在查询中使用。即不得将字段与空值进行比较。例如,将所有字段留空将返回除搜索name之外的所有用户仅返回与name匹配的文档。

最初,我的查询很简单,我在我的控制器中使用User.find(new User(params));,它工作正常。现在我需要能够使用大于和小于的间隔查询整数字段。我查看了withCriteria()并根据用户设置了哪些字段来构建查询,但迄今为止我一直不成功。

TL; DR 我该如何做一个查询,我不知道用户想在查询中包含哪些字段?

回答

1

我解决它通过使用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) 
}