Spring数据mongodb - 尝试聚合和项目时的空结果

时间:2018-05-11 17:46:24

标签: java mongodb spring-boot spring-data-mongodb

我在使用mongooperations进行投影和分页方面遇到了一些麻烦。我总是得到空洞的结果。查询条件工作正常,没有聚合。我尝试了相同的代码,没有分页(跳过和限制),没有排序,但我仍然得到空的结果。

我的代码:

public List<ProfileBasic> findAllActiveUsersByGenderAndAgeBetweenProjectedPage(Gender gender, int fromAge, int toAge, int pageSize, int page) {

        Criteria criteria = Criteria.where("gender").is(gender).and("confirmed").is(true)
                .and("dateOfBirth").lte(LocalDate.now().minusYears(fromAge))
                .gte(LocalDate.now().minusYears(toAge));
        MatchOperation match = Aggregation.match(criteria);
        ProjectionOperation  project = Aggregation.project()
                .and("id").as("id")
                .and("name").as("name")
                .and("lastName").as("lastName")
                .and("gender").as("gender")
                .and("dateOfBirth").as("dateOfBirth")
                .and("lastVisit").as("lastVisit");
        SkipOperation skip = new SkipOperation(pageSize*(page-1));
        LimitOperation limit = new LimitOperation(pageSize);
        SortOperation sort = new SortOperation(new Sort(Sort.Direction.DESC, "lastVisit"));
        Aggregation aggregate = Aggregation.newAggregation(project, match, skip, limit, sort);
        return operations.aggregate(aggregate, User.class, ProfileBasic.class).getMappedResults();
    }

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

当我们在MongoDB中进行聚合时,会分阶段处理数据,并将一个阶段的输出作为输入提供给下一阶段。

在我的代码第一阶段是项目而不匹配(查询):

Aggregation aggregate = Aggregation.newAggregation(project, match, skip, limit, sort);

这就是为什么它不起作用。

我把它改为:

Aggregation aggregate = Aggregation.newAggregation(match, skip, limit, project, sort);

现在它运作正常。