MongoTemplate возвращает нулевой идентификатор пользователя в проекте SpringBoot - PullRequest
0 голосов
/ 23 сентября 2019

Я работаю с весенней загрузкой и mongoDB, я пытаюсь сделать сложный запрос с MongoTemplate, чтобы получить все портфели без пустых проектов, но для всех результатов я получаю нулевой userId, и я не понимаю, где я ошибаюсь.Я новичок в Springboot, любая помощь будет признательна.

Когда я выполняю простой запрос, такой как Listfolios = portfolioRepository.findAll ();ИД пользователя не равен

Это мой код:

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 голосов
/ 27 сентября 2019

Я обнаружил, что моя проблема состоит в том, что нужно просто включить ожидаемые поля следующим образом

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);
...