数据存储计数查询fetchOptions

时间:2013-05-31 18:12:29

标签: java google-app-engine google-cloud-datastore datanucleus

我想做以下事情:

PreparedQuery pq = datastore.prepare(q);
int count = pq.countEntities(FetchOptions.ALL);

但是没有 ALL 选项。那我该怎么做呢?

对于上下文,我想要计算我的表中颜色为橙色的所有条目。

如果我不能直接使用DatastoreService执行此操作,我可以使用 Datanucleus的JPA 吗?他们支持SELECT COUNT(*) ...用于appengine数据存储区吗?

4 个答案:

答案 0 :(得分:5)

您可以使用以下代码计算记录总数。

com.google.appengine.api.datastore.Query qry = new com.google.appengine.api.datastore.Query("EntityName");
com.google.appengine.api.datastore.DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
int totalCount = datastoreService.prepare(qry).countEntities(FetchOptions.Builder.withDefaults());

我希望它会对你有所帮助。

答案 1 :(得分:2)

标记的答案不正确,最大值为1000

这就是人们获得正确计数的方式

DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
 Query query = new Query("__Stat_Kind__");
 Query.Filter eqf = new Query.FilterPredicate("kind_name",
                            Query.FilterOperator.EQUAL,
                            "MY_ENTITY_KIND");
query.setFilter(eqf);
Entity entityStat = ds.prepare(query).asSingleEntity();
Long totalEntities = (Long) entityStat.getProperty("count");

答案 2 :(得分:1)

你可以使用谷歌的DataNucleus插件,似乎show support for count()

答案 3 :(得分:1)

这个旧的但应该有助于寻求出路的新开发者。

最好的方法是使用分片计数器技术,因为你保存在你知道会随时间扩展的实体上,使用分片计数器来获取插入记录的总数或实体组的更新新记录,通过这个,您可以获得计数器的总数及其相应的计数,这些计数将总计得出数据存储表或种类中总元素的实际计数。

使用此链接获取有关如何进行操作的帮助,以便更好地了解观看Google i / o 2008有关扩展网络应用程序here的信息,然后转到有关appengine here的此文档,所以你很快掌握了它,并且还有一个github示例测试。

对于添加的示例,请使用此链接Blog Tutorial,它解释了一个简单的示例。