【发布时间】: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。
浏览stackoverflow上的帖子,我发现了一个例子,例如:
@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 。当我搜索“红色”时,它会找到“红色”,但如果我只搜索它的一部分,它就无法找到该对象。我现在会更新我的问题
标签: mongodb spring-boot nosql