2012-02-01 24 views
1

動態MongoDB的查詢我在Grails的Grails中

class User { 
    static mapWith = "mongo" 

    ObjectId id 
    String name 
    String address 
    Integer age 
} 

我建立Grails中搜索前端使用MongoDb plugin查詢MongoDB數據庫與此類似域。可以在數據庫中的任何字段上進行搜索,並且任何未由用戶設置的字段都不能在查詢中使用。即不得將字段與空值進行比較。例如,將所有字段留空將返回除搜索name之外的所有用戶僅返回與name匹配的文檔。

最初,我的查詢很簡單,我在我的控制器中使用User.find(new User(params));,它工作正常。現在我需要能夠使用大於和小於的間隔查詢整數字段。我查看了withCriteria()並根據用戶設置了哪些字段來構建查詢,但迄今爲止我一直不成功。

TL; DR 我該如何做一個查詢,我不知道用戶想在查詢中包含哪些字段?

回答

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