【问题标题】:How to make combination of 'and and 'or' operator to get the data in mongo db in javajava - 如何组合'and'和'or'运算符以在java中获取mongodb中的数据
【发布时间】: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


【解决方案1】:

如果分支是一个列表,首先你可以将它们收集到一个新的 Criteria 列表中:

ArrayList<Criteria> branchCriteriaList = new ArrayList<>();
for (String branch : searchParams.getFilter().getBranch()) {
        branchCriteriaList.add(Criteria.where("branch").is(branch));
    }

然后使用此列表,您可以构建 AND 运算符,并在其中添加分支条件列表作为 OR 运算符,如下所示:

query.addCriteria(
            new Criteria().andOperator(
                    Criteria.where("title").is(searchParams.getTitle()),
                    Criteria.where("subject").is(searchParams.getFilter().getSubject()),
                    new Criteria().orOperator(branchCriteriaList.toArray(Criteria[]::new))
            )
    );

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 2019-07-15
    • 2014-02-24
    • 1970-01-01
    • 2015-02-26
    • 2021-12-04
    • 2020-12-17
    • 2019-02-10
    相关资源
    最近更新 更多