【发布时间】:2021-09-10 09:57:16
【问题描述】:
我有以下输入json数据从数据库中获取过滤后的结果:
{
"title": "course",
"filter": {
"subject": ["java"],
"branch": ["CS", "IT"]
}
从上面输入的json数据中,我需要过滤掉以下场景中的记录:
结果包含搜索字符串“course”且主题为“java”且分支为“CS”或“IT”。
使用如下代码:
import java.util.List;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SearchRequest{
private String title;
private Map<String, Object> filters;
}
I have tried to following code for the desired output:
public List<CourseEntity> getData(SearchRequest searchParams) {
query.addCriteria(Criteria.where("title").is(searchParams.getTitle()).andOperator(Criteria.where("subject").is(searchParams.getFilters().get("subject"))
.andOperator(Criteria.where("branch").in(searchParams.getFilters().get("branch")))));
}
但是通过这种方式没有成功。我们怎样才能得到这个?
【问题讨论】:
-
searchParams.getFilters().get("branch")中包含什么?是List吗? -
同样在您的输入 JSON 中,我看到
subject表示为Array。如果总是有一个主题,那么它应该是String。 -
是的 searchParams.getFilters().get("branch") - 它是一个列表。私有 Map
> 过滤器;主题可以有多个值和数组类型。
标签: java spring mongodb mongodb-query aggregation-framework