Java 如何使用QueryDsl和PageRequest类按多个列/字段的组合值(X集合的总大小)排序?

Java 如何使用QueryDsl和PageRequest类按多个列/字段的组合值(X集合的总大小)排序?,java,spring,mongodb,sorting,querydsl,Java,Spring,Mongodb,Sorting,Querydsl,我正在使用QueryDsl和MongoDB。 这是我打给狗的电话: return findAll(predicate, pageRequest); 我相信这一切都是为了创建一个正确的PageRequest对象。 您需要了解的内容: 实体“狗”包含“基本”、“证书和头衔”以及“表演”的集合。 “基本”有一个绿色名称。 “CertificatesAndTitles”包含三个集合:championats、juniorChampions、countryChampions。“Show”实体包含“Titl

我正在使用QueryDsl和MongoDB。
这是我打给狗的电话:

return findAll(predicate, pageRequest);
我相信这一切都是为了创建一个正确的PageRequest对象。

您需要了解的内容:
实体“狗”包含“基本”、“证书和头衔”以及“表演”的集合。
“基本”有一个绿色名称。
“CertificatesAndTitles”包含三个集合:championats、juniorChampions、countryChampions。
“Show”实体包含“Title”集合。

请注意,这些只是一些属性,其他属性并不重要。它必须是这样的,是别人做的,这是一个要求

对我有效的方法是:

new PageRequest(page, size, new Sort(Direction.ASC, "basic.pedigreeName"))
这将按狗名的字母顺序对狗进行排序。

然而,我还没有实现一个主要排序。为了做到这一点,我必须总结冠军、青年冠军、乡村冠军、冠军的规模,并根据结果进行排序


到目前为止我尝试过的,但不起作用(目前只有一个系列):

newpagerequest(页面、大小、新排序(Direction.DESC,“certificatesAndTitles.championats.size()”)
新建页面请求(页面、大小、新排序(Direction.DESC,“QDog.dog.certificates和titles.championats.size()”)
新建页面请求(页面、大小、新排序(Direction.DESC,“size(certificates和titles.championats)”)
新的QPageRequest(页面、大小、新的QSort(新的OrderSpecifier(Order.DESC、QDog.dog.Certificates和titles.championats.size()))
我不想创建用作“总计计数器”的其他数据库字段,因为这感觉很糟糕,而且此项目中有更多排序组合。这只是其中之一

即使我们设法让它工作,如何组合多个集合的大小值

我花了很长时间寻找答案。在SQL中,它将非常简单,但这是mongo,我不知道如何在QueryDsl中实现它。任何帮助都将不胜感激

new PageRequest(page, size, new Sort(Direction.DESC, "certificatesAndTitles.championats.size()"))
new PageRequest(page, size, new Sort(Direction.DESC, "QDog.dog.certificatesAndTitles.championats.size()"))
new PageRequest(page, size, new Sort(Direction.DESC, "size(certificatesAndTitles.championats)"))
new QPageRequest(page, size, new QSort(new OrderSpecifier<>(Order.DESC, QDog.dog.certificatesAndTitles.championats.size())))