0

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

int rank = o.query(Entity.class).order(String.format("-%s",attribute)).
           .filter(String.format("%s >", attribute), something).count();

但是,有些东西是我卡住的部分。据我了解objectify的概念,查询特定的实体成员是不可能的。我的下一步要么是使用(丑陋但在开发时间方面很快)if-construct 来识别特定的实体成员,或者开始使用反射(不那么丑陋,但在开发时间方面很慢)。

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

4

1 回答 1

1

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

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

我可能会选择#2。无论哪种方式,我都希望您的数量不会很大,否则您将处理大量小型数据存储操作,并且您的应用程序会很昂贵!

于 2012-08-01T16:48:50.670 回答