在SpringBoot项目中MongoTemplate返回userId null

时间:2019-09-23 14:32:17

标签: mongodb spring-boot mongotemplate

我使用spring boot和mongoDB,我尝试使用MongoTemplate提出一个复杂的请求,以获取没有空项目的所有投资组合,但是对于所有结果,我收到的userId为null,并且我不知道我哪里错了。我是springboot上的新人,将不胜感激。

当我执行一个简单的请求时,例如List Portfolios = PortfolioRepository.findAll(); userId不为空

这是我的代码:

PortfolioRepositoryImpl(带有MongoTemplate)

public List<Portfolio> getPortfolioWithNoEmptyProjects() {
    Query query = new Query();
    query.addCriteria(Criteria.where("projects").exists(true).ne(new ArrayList<>()));
    query.fields().elemMatch("projects", Criteria.where("online").is(true));
    // query.with(new Sort(Sort.Direction.ASC, "created"));
    return mongoTemplate.find(query, Portfolio.class);
  }

投资组合文档

@Document
public class Portfolio {

    @Id
    @Getter
    private String id;

    @Getter
    @Setter
    @NotBlank(message = "media.user.id.not.be.null.or.empty")
    private String userId;

    @Getter
    @Setter
    @NotNull(message = "portfolio.projects.not.be.null")
    private ArrayList<Project> projects;

    public Portfolio() {
        this.projects = new ArrayList<>();
    }

}

文档的结构

enter image description here

结果

enter image description here

1 个答案:

答案 0 :(得分:0)

我发现我的问题只需要包含以下预期字段

Query query = new Query();
query.fields().include("user");
query.addCriteria(Criteria.where("projects").exists(true).ne(new ArrayList<>()));
query.fields().elemMatch("projects", Criteria.where("online").is(true));
return mongoTemplate.find(query, Portfolio.class);