Java 计算实体在Objectify中的排名

Java 计算实体在Objectify中的排名,java,entity,ranking,objectify,Java,Entity,Ranking,Objectify,我的目标是根据作为字符串提供的某些属性计算实体的绝对排名。我使用的基本方法是发出查询,按降序对其结果进行排序,并计算所有大于特定实体属性值的结果。查询看起来像这样 int rank = o.query(Entity.class).order(String.format("-%s",attribute)). .filter(String.format("%s >", attribute), something).count(); 然而,有些东西是我被卡住的地方。就我理

我的目标是根据作为字符串提供的某些属性计算实体的绝对排名。我使用的基本方法是发出查询,按降序对其结果进行排序,并计算所有大于特定实体属性值的结果。查询看起来像这样

int rank = o.query(Entity.class).order(String.format("-%s",attribute)).
           .filter(String.format("%s >", attribute), something).count();
然而,有些东西是我被卡住的地方。就我理解objectify的概念而言,查询特定的实体成员是不可能的。我的下一步是使用(丑陋但在开发时间方面很快)if构造来标识特定的实体成员,或者开始使用反射(丑陋程度稍低,但在开发时间方面很慢)


无论哪种方式,我都会觉得我错过了完成这项任务的一些明显和/或优雅的方式。有什么建议吗?Thx.

如果我理解正确,您想要第一个实体,您想要剩余实体的计数?有两种方法可以做到这一点:

  • 使用两个查询。对将返回第一个实体的>=实体使用
    limit(1)
    。首先启动它,但不要具体化结果,使其与第二个并行异步运行
  • 使用>=运行仅限键查询,而不是
    count()
    。保留第一个键进行提取,并手动计数其余的键。仅键查询的成本与count()查询相同(每个计数的小操作数),因为count()查询本质上是相同的

  • 我可能会选择2号。不管是哪种方式,我希望你的数量不要太多,否则你会大量使用小型数据存储操作,你的应用程序会很昂贵

    对不起,我的描述可能有点误导。我的目标是计算给定实体的绝对秩,以允许这样的语句:“根据属性‘a’,这里我的实体是第n个”。我的解决方案是使用反射来确定要过滤的属性值,然后像上面那样进行查询。为了提高性能,我同意您的建议,运行一个只包含密钥的查询,然后手动计算密钥。工作起来像个符咒,thx:)。