大写的mongoDB spring-boot自定义查询,带有LIKE

Posted

技术标签:

【中文标题】大写的mongoDB spring-boot自定义查询,带有LIKE【英文标题】:mongoDB spring-boot custom query in uppercase, with LIKE 【发布时间】:2018-04-26 02:12:27 【问题描述】:

我需要通过 mongodb 实现的 db 上的 spring boot 按名称搜索项目。对于普通的 SQL 数据库,我会这样做:

@Query("SELECT * FROM customer WHERE UPPER(name) LIKE UPPER(CONCAT('%', :name, '%'))")
List<Customer> findByName(@Param("name") String name);

但它不接受普通的“SELECT”查询,因为它是一个 NoSQL 数据库。因此我需要使用 JSON 格式查询这个集合,但我不知道 spring-boot 上的实现。这也是我第一次使用 mongodb

浏览***上的帖子,我发现了一个例子,例如:

@Query("'name':?0")

在this site 上有例子。 here 也有上面查询的解释。但是我仍然不知道如何将上面粘贴的前一个查询转换为“基于 json 的查询”。

注意:我正在我的存储库上扩展 MongoRepository。

注意2:上述查询区分大小写,这就是我尝试以大写查询同时将列数据转换为大写的原因。

更新

@Query("  $text:  $search: ?0 , $caseSensitive: false  ")

完美运行(我必须通过启动此命令来索引我的收藏:db.customerCollection.createIndex(name: "text"))以忽略大小写敏感,但我仍然需要实现'LIKE';因为当我搜索“用户”时,它能够找到“用户”等。但是如果我搜索“se”,它不会给我带来任何结果。任何帮助将不胜感激!

感谢您的宝贵时间!

【问题讨论】:

你试过这个查询 $text: $search: ?0 , $caseSensitive: true 。您可以查看此内容以供参考。 docs.mongodb.com/manual/reference/operator/query/text/… 您好,谢谢您的回答。它给了我一个错误消息:“$ text 查询需要文本索引”。现在我正在寻找解决它的方法。 我已将索引添加到我的收藏中,并且一切正常!剩下的唯一事情就是现在实现 LIKE 。当我搜索“红色”时,它会找到“红色”,但如果我只搜索它的一部分,它就无法找到该对象。我现在会更新我的问题 【参考方案1】:

我已通过使用$regex 并将查询编写为:

@Query("  companyName:  $regex : '(?i)?0'   ")

我从来没有想过会花这么多时间来做这么简单的事情。但我很高兴它无论如何都解决了!

[ref]

【讨论】:

以上是关于大写的mongoDB spring-boot自定义查询,带有LIKE的主要内容,如果未能解决你的问题,请参考以下文章

测试开发专题:spring-boot自定义返回参数校验错误信息

测试开发专题:spring-boot自定义返回参数校验错误信息

spring-boot添加自定义拦截器

企业级spring-boot案例-自定义Spring Boot Starter

测试开发专题:spring-boot自定义异常返回

测试开发专题:spring-boot自定义异常返回