Grails中的动态MongoDb查询

时间:2012-02-01 14:23:53

标签: grails mongodb gorm

我在Grails

中有类似的域名
class User {
    static mapWith = "mongo"

    ObjectId id
    String name
    String address
    Integer age
}

我正在Grails中构建搜索前端,以使用MongoDb plugin查询MongoDb数据库。可以在数据库中的任何字段上进行搜索,并且不能在查询中使用任何未由用户设置的字段。即没有字段应与null比较。例如,将所有字段保留为空会返回所有用户,但搜索name仅返回与name匹配的文档。

最初我的查询很简单,我在我的控制器中使用User.find(new User(params));,工作正常。现在我需要能够使用大于和小于的间隔查询整数字段。我查看withCriteria()并根据用户设置的字段构建查询,但到目前为止我还没有成功。

TL; DR 如何在我不知道用户想要在查询中包含哪些字段的情况下进行查询?

1 个答案:

答案 0 :(得分: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)
}