我在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/