我在使用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();
}
我将不胜感激。
答案 0 :(得分:0)
当我们在MongoDB中进行聚合时,会分阶段处理数据,并将一个阶段的输出作为输入提供给下一阶段。
在我的代码第一阶段是项目而不匹配(查询):
Aggregation aggregate = Aggregation.newAggregation(project, match, skip, limit, sort);
这就是为什么它不起作用。
我把它改为:
Aggregation aggregate = Aggregation.newAggregation(match, skip, limit, project, sort);
现在它运作正常。