2017-08-10 40 views
0

在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

只有在實際部署的時候 –

回答

1

您應該能夠從元數據得到各種。使用GQL,您可以運行下面的查詢列出所有種:

SELECT __key__ FROM __kind__ ORDER BY __key__ 

這將返回所有種,包括任何種類系統;種類以雙下劃線開始(例如__Stat_Kind__)。

在遍歷上述查詢的結果時,只需排除系統種類,然後對每種類型運行刪除以進行清理。

根據您使用的API,如果它不支持GQL,請使用相應的查詢生成器並運行它。

看看這個AppEngine Datastore documentation

+0

這就是我最終的結果,但我認爲會有一些「更乾淨」的方式來做到這一點。無論如何,將您的答案標記爲解決方案,因爲這是我得到的唯一一個:) –