2013-01-23 35 views
0

我对Grails的这样的代码MongoDB的Grails的嵌入式查询阵列

//myDomain 
class Plugin { 
    List<String> projects = [] 
    //projects has name and description 
} 

//myController 
def query = null 
    if (params.q != null) 
    { 
     def q = '%'+ params.q +'%' 
     query = Plugin.where { 
      (projects.name =~ q || projects.name ==~ q) 
     } 
    } 
//return null 

为什么我可以通过projects.name找不到插件?

+0

'==〜'条件是多余的,你可以删除它。 – eugene82

+0

需要更多的代码才能回答。什么/你如何返回?另外:也许'params.q'是'null'? – eugene82

+0

Mongo只支持基本类型列表,所以你可能想要做列表和hasMany。 –

回答

0

从属性定义

List<String> projects = [] 

项目的元素是字符串,这就是为什么你不能查询projects.name,这是不知道GORM。

而在你最后的评论,在工程实例"projects": { "0": { "description": "123", "name": "cms" }, "1": { "description": "cms", "name": "codebucks" } }值看起来像一个地图,其中的项目数是关键,包含名称和说明一个内部地图是价值,而不是一个列表。

为了达到您的目的,您需要修改您的域类定义以确保您的模型和数据之间的一致性。

+0

嗨。 thx为你的答案,我完成它与createCriteria,我得到projects.name,THX无论如何。 –

+0

所以你用'List projects = []'做了它?我想知道你是怎么做到的。您能否将您的解决方案作为答案发布? – coderLMN

+0

是的,我使用List 项目,以及我的控制器方法DEF listPluginByProject() \t \t { \t \t DEF objectInstanceList = [] \t \t DEF Q = '%' + params.q + '%' \t \t \t \t DEF C = Plugin.createCriteria() \t \t DEF结果= {c.list \t像( 'projects.name',q) \t \t} \t \t objectInstanceList = results} –