Objectify/AppEngine:计算查询返回的对象数的最佳方法?

Lau*_*ire 8 google-app-engine objectify

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;
}
Run Code Online (Sandbox Code Playgroud)

似乎没有任何专门的方法来做到这一点.有任何想法吗?

Lau*_*ire 14

找到了:

int n = Iterable<Key<MyEntity>> list = ofy().query(MyEntity.class)
      .filter("field", v).count();
Run Code Online (Sandbox Code Playgroud)

这很简单,虽然效率很高,因为它会检索所有密钥.最好设计你的用户界面来处理未知数量的结果(例如谷歌提供了网页数量但不是实际数量的线索)

  • 请记住,计算实体总是效率低下 - O(n)时间.如果你期望有很多,你应该保持持久计数. (2认同)