grails - Grails中的动态MongoDb查询

标签 grails mongodb gorm

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

class User {
    static mapWith = "mongo"

    ObjectId id
    String name
    String address
    Integer age
}

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

最初,我的查询很简单,我在 Controller 中使用了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)
}

关于grails - Grails中的动态MongoDb查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097421/

相关文章:

mongodb - 无法使用mongo 3.0.2在2.4.4上执行grails run-app

grails - 基于 IP 地址分配 A/B 测试变体的最佳实践

javascript - 谁来正确管理套接字上的 mongodb 数据(服务器端)

java - 即使数据存在,我的 MongoDB .find() 方法也返回 null

grails - 获取最新的10个注册用户-Spring Security Grails

grails - 每次重新启动应用程序时,将Grails MySQL数据库重置

java - 从 Grails 调用 Java Smooks 库时出错

mongodb 版本 3.0.0 客户端 robomongo mongovue

grails - 如何使组合框表示的Grails中的字段成为可选字段?

grails - 我如何渴望通过Grails加载通过joinTable定义的关联类?