【问题标题】:Grails embedded query arrayGrails 嵌入式查询数组
【发布时间】:2013-01-23 11:45:10
【问题描述】:

我在 grails mongodb 上有这样的代码

//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 找到插件?

【问题讨论】:

  • ==~ 条件是多余的,可以去掉。
  • 需要更多代码来回答。你究竟返回什么/如何返回?另外:也许params.qnull
  • Mongo 只支持基本类型 List,所以你可能想做 List 和一个 hasMany。
  • 另外,如果是列表,不应该是projects*.name之类的吗?
  • “项目”:{“0”:{“描述”:“123”,“名称”:“cms”},“1”:{“描述”:“cms”,“名称": "codebucks" } } 示例我想在 projects.name == 'cms' 时找到,我如何在 mongo 中查询?还是谢谢

标签: mongodb grails embedded-database


【解决方案1】:

从属性定义

List<String> projects = []

项目的元素都是字符串,所以不能查询projects.name,这对于GORM来说是不知道的。

在您的上一条评论中,项目实例"projects": { "0": { "description": "123", "name": "cms" }, "1": { "description": "cms", "name": "codebucks" } } 中的值看起来像一个 Map,其中项目编号是键,包含名称和描述的内部映射是值,而不是 List。

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

【讨论】:

  • 嗨。谢谢你的回答,我用createCriteria完成它,我得到了projects.name,谢谢。
  • 所以你用List&lt;String&gt; projects = [] 做到了?我想知道你是怎么做到的。您能否发布您的解决方案作为答案?
  • 是的,我使用 List 项目和我的控制器方法 def listPluginByProject() { def objectInstanceList = [] def q = '%'+ params.q +'%' def c = Plugin .createCriteria() def results = c.list { like('projects.name', q) } objectInstanceList = results }
  • 我不知道为什么 createCriteria 在没有休眠的情况下仍然有效,我使用 grails 2.1.1,但为了安全起见,我尝试按照您的建议修改域类,或查找其他查询。
  • 因为mongodb gorm插件提供了类似的功能。
猜你喜欢
  • 1970-01-01
  • 2021-08-07
  • 2021-03-24
  • 2016-10-26
  • 2015-02-06
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
相关资源
最近更新 更多