Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails中的动态MongoDb查询_Grails_Mongodb_Gorm - Fatal编程技术网

Grails中的动态MongoDb查询

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匹配的文档 最初

我在Grails中有一个类似的域

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)
}