繁体   English   中英

Grails中的动态MongoDb查询

[英]Dynamic MongoDb queries in Grails

我在Grails中有一个与此类似的域

class User {
    static mapWith = "mongo"

    ObjectId id
    String name
    String address
    Integer age
}

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

最初,我的查询很简单,我使用了User.find(new User(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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM