使用 MongoDB 在 Grails 中命名查询的列表方法中排序不区分大小写

Posted

技术标签:

【中文标题】使用 MongoDB 在 Grails 中命名查询的列表方法中排序不区分大小写【英文标题】:sort case insensitive in list method of a named query in Grails with MongoDB 【发布时间】:2013-08-20 22:26:35 【问题描述】:

有没有办法指定命名查询中的列表不区分大小写?我认为在 grails 2.2 之前这是默认设置,但在 Grails 2.2.3 中无法正常工作......

这是我调用命名查询并尝试以不区分大小写的方式进行列表排序的代码行。

BackendUser.filter(company,filter).list(max:max,offset:offset,"sort":sortName,order:order,ignoreCase:true)

如您所见,我已尝试添加 ignoreCase:true 选项,但它不起作用。而且我无法在命名查询中添加排序,因为我在其他需要不同排序选项的地方使用它。

以防万一,这是命名查询

static namedQueries = 
    filter company,filter->
        eq 'company',company
        if (filter.firstName)
            ilike 'firstName',"%$filter.firstName%"
        
        if (filter.lastName)
            ilike 'lastName',"%$filter.lastName%"
        
        if (filter.email)
            ilike 'email',"%$filter.email%"
        
    

编辑:对不起,我忘了提到我正在使用 MongoDB,我认为是这个导致问题的人

【问题讨论】:

ilike 确实不区分大小写。您可以启用 sql 的日志来查看 Hibernate 应该输出带有lower() 的查询。 我的意思是排序,而不是过滤本身。 ilike 工作正常,问题是例如按名称排序时:'AAA'.'aaa,'BBB'。它命令:'AAA','BBB','aaa' 而不是 'AAA','aaa','BBB' 嗨@Eylen 你是如何解决你的问题的?我需要达到同样的效果,我不想将排序放在命名查询中,而是放在命名查询的列表方法中。 @AdityaThakur 我想我是手动完成的,因为我使用的版本存在错误。不知道是不是已经修复了 @Eylen 感谢您的回复,实际上Grails默认实现了不区分大小写的排序,我通过查看生成的sql确认了这一点,我使用的是mysql,对我来说,问题有些不同。跨度> 【参考方案1】:

看着here,看来你可以做到:

//pass dir to your named query
order(new Order(param, dir=='asc').ignoreCase())

【讨论】:

我不想在命名查询中添加排序,只是在列表方法中,因为我在其他地方使用这个命名查询有不同的排序需求 要处理不同的排序,只需将其作为参数传递给 namedQuery 并进行处理。 我又查看了list method。它有ignoreCase,它应该是默认的,所以也许它是2.2.3的东西。我将在这里测试并更新我的答案。 我是这么认为的,如果你发现了什么请告诉我:) 在这里测试过,但订单应用正确。请enable the sql log查看您的查询是否也有订单。

以上是关于使用 MongoDB 在 Grails 中命名查询的列表方法中排序不区分大小写的主要内容,如果未能解决你的问题,请参考以下文章

Grails 命名查询

命名查询中的 Grails GORM 计数函数

Grails 命名查询

Grails 命名查询 - 按关联查找

grails 命名查询返回不正确的数据

在 grails3 中使用 mongodb 和休眠