2012-02-22 106 views

回答

2

對於由重點檢查一個實體的存在,最簡單,最便宜的是簡單地使用get()

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
datastore.get(KeyFactory.createKey(kind, long)) 

獲取(1個讀操作) (1閱讀+ 1小):http://code.google.com/appengine/docs/billing.html

+0

以上將獲取整個實體,因此它不是唯一的關鍵查詢。 – 2012-02-23 10:45:46

+0

是的,但沒關係。用於測試實體的存在是其最廉價的方式(也可能是最快的)。 – 2012-02-23 10:51:50

+0

根據實體的大小,這可能不是最快的。我認爲現在數據存儲帶寬的收費已經過去了,所以它保證了我認爲的最便宜。 – mjaggard 2012-02-23 14:26:02

3

是的,這是可能的!

嘗試是這樣的:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
Query gaeQuery = new Query(entityName); 
gaeQuery.setKeysOnly();  
gaeQuery.addFilter("__key__", FilterOperator.EQUAL, key); 
PreparedQuery pq = datastore.prepare(gaeQuery); 
List<Entity> results = pq.asList(FetchOptions.Builder.withLimit(1)); 

Key elementKey = null; 
if (results.size() == 1) { 
    elementKey = results.get(0).getKey(); 
} 
0

如果你想測試的存在,你可以使用維克多的建議,但獲取公司UNT代替:

return datastore.prepare(gaeQuery) 
    .countEntities(FetchOptions.Builder.withLimit(1)) > 0; 
相關問題