列出除了保留的一个(java)以外的Google数据存储区中的所有类型

时间:2017-08-10 14:45:24

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

在Appengine(java)中,我能够使用此代码列出我的数据存储区的所有实体,以便稍后删除它们。问题是我在日志中得到了很多The kind "__XXX_Kind__" is reserved.,所以我想要一种方法来检索所有未保留的实体。

这可能吗?

do {
    FetchOptions options = FetchOptions.Builder.withLimit(100);
    if(cursor != null) {
        options.startCursor(cursor);
    }
    QueryResultList<Entity> results = pq.asQueryResultList(options);
    if(results.size() > 0) {
        for (Entity result : results) {
            try {
                datastore.delete(result.getKey());   
            } catch (Exception e) {
                log.warning(e.getMessage());
            }
        }
        cursor = results.getCursor();
    } else {
        cursor = null;
    }
} while(cursor != null);

1 个答案:

答案 0 :(得分:1)

您应该能够从元数据中获取所有种类。使用GQL,您可以运行以下查询列出所有种类:

SELECT __key__ FROM __kind__ ORDER BY __key__

这将返回所有种类,包括任何系统种类;种类以双下划线开头(例如__Stat_Kind__)。

在迭代上述查询的结果时,只需排除系统类型,然后为每种类型运行删除以进行清理。

根据您使用的API,如果它不支持GQL,请使用等效的Query Builder并运行它。

看看这个AppEngine Datastore documentation