我的目标是根据以字符串形式提供的某些属性来计算实体的绝对排名。我使用的基本方法是发出查询,按降序对其结果进行排序,并对所有大于我的特定实体的属性值的结果进行计数。查询看起来像这样
int rank = o.query(Entity.class).order(String.format("-%s",attribute)).
.filter(String.format("%s >", attribute), something).count();
但是,有些事情让我陷入困境。据我理解对象化的概念,查询特定实体成员是不可能的。我的下一步要么是使用(丑陋但在开发时间方面很快)if 构造来识别特定的实体成员,要么开始使用反射(不太丑陋,但在开发时间方面很慢)。
无论哪种方式,我都感觉我错过了一些明显和/或优雅的方式来完成这项任务。有什么建议么?谢谢。
最佳答案
如果我理解正确的话,您想要第一个实体并且想要剩余实体的数量?有两种方法可以做到这一点:
- 使用两个查询。在 >= 上使用
limit(1)
将返回第一个实体。首先启动它,但不要具体化结果,以便它与第二个并行异步运行。 - 使用 >= 运行仅键查询,而不是
count()
。保留第一个键来进行提取,并手动计算其余的键。仅键查询的成本与 count() 查询相同(每次计数的操作次数较少),因为 count() 查询本质上是相同的。
我可能会选择#2。无论哪种方式,我希望您的计数不会很大,因为否则您将通过大量小型数据存储操作进行搅动,并且您的应用程序将非常昂贵!
关于java - 在 Objectify 中计算实体的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11758120/