【发布时间】:2021-03-18 21:25:23
【问题描述】:
我在尝试查询包含数组的 mongo 集合(称为项目)时遇到问题。我有一个查询方法,它将检查传递给方法的 ListArray 是否与 mongo 数组中的任何条目匹配。现在这一直有效,直到数据库中的区分大小写不匹配。
我不知道文档中的值是大写还是小写,所以我想添加一个正则表达式来忽略大小写。但是我不知道该怎么做。
这是我的查询方法的代码:
@Override
public List<Project> findAllProjectsForShowCaseNewestFirst(Integer offset, Integer limit, List<String> techStack) {
Query query = new Query();
query.with(Sort.by(Sort.Direction.DESC, "createdDate"));
if(!techStack.isEmpty()) {
query.addCriteria(Criteria.where("projectTechStack").in(techStack));
}
return mongoTemplate.find(query, Project.class);
}
我尝试了以下方法,但它会引发错误:
query.addCriteria(Criteria.where("projectTechStack").in(techStack).regex("i"));
如果有人可以在这里帮助我,我将非常感激。
谢谢
编辑:值得注意的是,我可以看到这对于一个简单的字符串是如何工作的,如 here 所见,但我一生都无法看到这将如何应用于列表
【问题讨论】:
-
感谢@Felipe 的回复,问题是,我不知道如何将该逻辑应用于字符串列表,即 $n。在我的代码示例中:query.addCriteria(Criteria.where("projectTechStack").in(techStack).regex("i")); techStack 是一个列表数组
-
如果要将正则表达式应用于文档中的列表,请使用带有 $filter 运算符的聚合查询。此数组运算符将允许您迭代列表,并且您可以为每个数组元素应用正则表达式条件。我认为这会奏效。
标签: spring mongodb spring-boot spring-data-mongodb