Objectify/AppEngine:计算查询返回的对象数的最佳方法?
Posted
技术标签:
【中文标题】Objectify/AppEngine:计算查询返回的对象数的最佳方法?【英文标题】:Objectify/AppEngine: best way to count # of objects returned by a query? 【发布时间】:2011-06-29 21:41:53 【问题描述】:在 AppEngine 上使用 Objectify 计算查询返回的对象数量的最佳(即最有效)方法是什么,无需实际加载它们?我猜最好的办法是获取所有密钥并计算结果:
public int getEntityCount(Long v)
Objectify ofy = ObjectifyService.begin();
Iterable<Key<MyEntity>> list = ofy.query(MyEntity.class)
.filter("field", v).fetchKeys();
int n = 0;
for (Key<MyEntity> e : list)
n++;
return n;
似乎没有任何专门的方法可以做到这一点。有什么想法吗?
【问题讨论】:
【参考方案1】:找到了:
int n = Iterable<Key<MyEntity>> list = ofy().query(MyEntity.class)
.filter("field", v).count();
它很简单,但很有效,因为它会检索所有的键。最好设计您的 UI 来处理未知数量的结果(例如 Google,它提供了页数的线索,但不提供实际数量)
【讨论】:
请记住,计算实体总是低效的 - O(n) 时间。如果你预计会有很多,你应该保持一个持久的计数。 有点效率低下,但至少它不获取实体,只是键,对吧?就我而言,可能有很多“MyEntity”对象,但过滤器数量从来没有那么大( 这种方式是不是一次获取的item数量有问题?我尝试过类似的方法,但它最终不起作用,因为最大计数为 1000(开发服务器)。 您应该始终通过其静态方法 ofy() 访问 ofy,而不是保留对它的引用。 对 v4 是正确的,但是当 v3 仍然是最新版本并且该代码遵循 v3 文档编码样式时提出了问题。现在在 v4 中,这是不好的做法,但不是错误的......以上是关于Objectify/AppEngine:计算查询返回的对象数的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章