我使用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<>();
}
}
文档的结构
结果
答案 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);