如何在Google App Engine中获取数据存储模型中的行数?

25 google-app-engine google-cloud-datastore

我需要在App Engine上获取特定模型的记录数.怎么做呢?

我批量上传了4000多条记录,但是modelname.count()只显示了1000条.

Tom*_*myN 18

您应该使用数据存储统计:

Query query = new Query("__Stat_Kind__");
query.addFilter("kind_name", FilterOperator.EQUAL, kind);       
Entity entityStat = datastore.prepare(query).asSingleEntity();
Long totalEntities = (Long) entityStat.getProperty("count");
Run Code Online (Sandbox Code Playgroud)

请注意,上述内容不适用于开发数据存储区,但它适用于生产(发布时).

我看到这是一篇很老的帖子,但我正在为其他人寻找相同的东西而添加答案.


dar*_*dar 13

从版本1.3.6开始,计数查询的上限不再为1,000.因此,您可以执行以下操作以获得超过1,000的计数:

count = modelname.all(keys_only=True).count()
Run Code Online (Sandbox Code Playgroud)

这将统计您的所有实体,如果您拥有大量实体,这可能会相当慢.因此,您应该考虑count()使用指定的限制进行调用:

count = modelname.all(keys_only=True).count(some_upper_bound_suitable_for_you)
Run Code Online (Sandbox Code Playgroud)

  • 我添加了keys_only = True更快 (3认同)
  • 300ms的?你从哪里得到那个数字?然而,无论如何,这证明了为什么动态计算物体不是一个好主意. (2认同)

小智 8

count = modelname.all(keys_only=True).count(some_upper_limit)
Run Code Online (Sandbox Code Playgroud)

只是为了添加dar的早期帖子,必须指定'some_upper_limit'.如果不是,默认计数仍将是最大值1000.


svp*_*ino 8

这是一个非常古老的线程,但为了防止其他人看到它,有3种方法可以实现这一点:

  1. 访问数据存储区统计信息
  2. 在数据存储区中保留一个计数器
  3. 分片计数器

在此链接中解释了这些方法中的每一种.


Fed*_*les 6

在GAE中,当您有超过1000个对象时,计数将始终使您翻阅结果.解决此问题的最简单方法是向模型或不同的计数器表添加计数器属性,并在每次创建新对象时更新它.