【问题标题】:How search case insensitive values using Criteria, MongoTemplate and Java?如何使用 Criteria、MongoTemplate 和 Java 搜索不区分大小写的值?
【发布时间】:2021-12-18 07:46:56
【问题描述】:

我目前正在做:

criteria = new Criteria().andOperator(where("car.color").is(car_color),
                                      where("car_size").is(car_size))

如何使此搜索同时适用于car_color = BLUEcar_color = blue


更新:

这部分有效:

where("car.color").regex(car_color, "i"),

但是下面的所有值都会被更新:

BLUE
BBLUE
blue
bluee

我只想更新 car_color 变量中匹配的内容(不区分大小写)。

【问题讨论】:

  • 不知道您的 API,但您没有选择大写来与等于大写标准进行比较吗?喜欢SELECT * FROM cars where UPPER('car.color') = 'BLUE'
  • 感谢您的建议。我已经在数据库中有一些无法更新的大写/小写条目,所以这不起作用。
  • select上层的思想是改变查询结果不更新数据库

标签: java spring spring-data-mongodb criteria case-insensitive


【解决方案1】:

我认为您想要的是将您的字符串预处理为全部大写或全部小写。在 java 中是这样完成的:

car_color.toLowerCase() 要么 car_color.toUpperCase()

那么你就知道它全部大写或全部小写,并且可以适当地比较字符串

【讨论】:

  • 您的假设是错误的,但感谢您的建议。我已经在数据库中有一些无法更新的大写/小写条目。
  • 啊,我明白了,抱歉,我无法提供更多帮助。我对 Criteria API 不是很熟悉,但也许之前的这篇文章会有所帮助? stackoverflow.com/questions/4580285/…
【解决方案2】:

我的问题的解决方法是:

criteria = new Criteria().andOperator(where("car.color").regex("^" + car_color+ "$", "i"),
                                      where("car_size").is(car_size))

【讨论】:

    猜你喜欢
    • 2018-02-26
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    相关资源
    最近更新 更多