2012-06-14 66 views
0

這個AppEngine任務似乎應該是微不足道的,但我還沒有完成它。我有一些數據,從而祖父母/父/子關係:Key +祖先的低級AppEngine查詢

EntityName Key 
----------- ------- 
GrandParent W 
GrandParent X 
Parent  W.A 
Parent  X.A 
Parent  X.B 
Child  W.A.i 
Child  X.A.i 
Child  X.A.ii <=== matches X.*.ii 
Child  X.A.iii 
Child  X.B.i 
Child  X.B.ii <=== matches X.*.ii 

我試圖構建與鍵X所有的孩子相匹配的查詢* II。換句話說,它會從上面返回鍵X.A.ii和X.B.ii,而沒有其他。我使用的是低層次的查詢機制,和我有什麼到目前爲止是這樣的:

Entity gpX = new Entity("GrandParent","X"); 
Query q = new Query("Child"); 
q.setAncestor(gpX.getKey()); 

它返回五個孩子。如果i/ii/iii屬性是一個屬性而不是一個鍵,這將是微不足道的,但它是一個關鍵,我不清楚如何指定'ii'是一個搜索條件。

回答

0

沒有一個單獨的屬性沒有辦法做到這一點。 App Engine數據存儲區中的所有過濾器必須是相等或範圍測試(相當於字符串前綴測試);無法按照您使用單個過濾器描述的方式進行過濾。

+0

但是我不能這樣做,如果「ii」屬性Child.Foo,通過q.setFilter(「Foo」,「ii」)?假設是這樣的話,我的問題似乎會減少到將Child.Key標識爲篩選字段而不是Child.Foo。 – user939737

+0

是的。這就是爲什麼我的回答開始於「沒有單獨的財產沒有辦法做到這一點」。關鍵的僞屬性包含整個密鑰,而不僅僅是您要過濾的ID /名稱。 –

+0

好的。我會把它放在一個單獨的屬性,謝謝。 – user939737