如何编写Spring criteria查询筛选products数组中name含指定字符串的文档
问题根因
你最初的写法使用in操作符是精确全值匹配,仅能命中name字段完全等于ABC或DEF的数组元素,无法实现子串包含的模糊匹配效果。
正确实现方案
场景1:匹配products数组中存在至少1个元素的name包含ABC或DEF的文档
有两种等效写法可选:
// 写法1:使用elemMatch显式匹配数组元素 query.addCriteria(Criteria.where("products").elemMatch( Criteria.where("name").regex("ABC|DEF") )); // 写法2:简化写法,MongoDB对数组字段默认匹配任意元素满足条件 query.addCriteria(Criteria.where("products.name").regex("ABC|DEF"));
如果需要忽略大小写匹配,给正则加i参数即可:
query.addCriteria(Criteria.where("products.name").regex("ABC|DEF", "i"));
场景2:匹配products数组中同时存在包含ABC的元素和包含DEF的元素的文档
query.addCriteria( Criteria.where("products.name").regex("ABC") .and("products.name").regex("DEF") );
内容的提问来源于stack exchange,提问作者saran3h
相关产品推荐
相关产品推荐

