在Google数据存储中列出除保留的数据存储之外的所有类型(java)

问题描述:

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

这可能吗?

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); 
+0

你看到这类仅在本地devserver或也GAE上部署的时候? –

+0

只有在实际部署的时候 –

您应该能够从元数据得到各种。使用GQL,您可以运行下面的查询列出所有种:

SELECT __key__ FROM __kind__ ORDER BY __key__ 

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

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

根据您使用的API,如果它不支持GQL,请使用相应的查询生成器并运行它。

看看这个AppEngine Datastore documentation

+0

这就是我最终的结果,但我认为会有一些“更干净”的方式来做到这一点。无论如何,将您的答案标记为解决方案,因为这是我得到的唯一一个:) –