[英]How to query parent entity from child entity in Google App Engine (Python) NDB/Datastore?
[英]Google App Engine DataStore - How to select parent entities from keys of a child table in Java in an efficient way?
我正在嘗試將演示文稿中的 Python 代碼轉換為 Java 在 App Engine 上構建可擴展的復雜應用程序,
GAEJ 是否支持這樣做?
indexes = db.GqlQuery( "SELECT __key__ FROM MessageIndex " "WHERE receivers = :1", me)
keys = [k.parent() for k in indexes]
messages = db.get(keys)
下面是我在 Java 中的實現。這些功能和性能是否等效? 如果我有大量密鑰會怎樣?
Query query1 = new Query("MessageIndex");
query1.setKeysOnly();
query1.addFilter("receivers", FilterOperator.EQUAL, me);
PreparedQuery pq2 = datastore.prepare(query1);
Iterable<Entity> entities = pq2.asIterable();
HashSet<Key> keys = new HashSet<Key>();
for (Entity en : entities)
keys.add(en.getParent());
Query query2 = new Query("Messages");
query2.addFilter("__key__", FilterOperator.IN, keys);
正如@Rick 已經指出的那樣,獲取比查詢更快、更便宜。 您只需要更改代碼的最后一部分。 代替:
Query query2 = new Query("Messages");
query2.addFilter("__key__", FilterOperator.IN, keys);
做就是了:
Map<Key,Entity> messages = datastore.get(keys);
查看DatastoreService API https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreService
DatastoreService.get(keys) 比使用鍵的查詢更有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.