2016-01-14 87 views
1

假設代碼在App Engine中的Ref的屬性:過濾用物化

@Entity 
public class MyEvent { 
    @Id Long id; 
    @Index String name; 
    Ref<Location> myLocation; 
} 

@Entity 
public class Location { 
    @Id Long id; 
    @Index String city; 
    @Index String country; 
} 

有我的方式做一個過濾器來查找特定城市中的所有事件?這似乎需要一個不支持的連接,但我想仔細檢查,因爲我找不到明確的答案。

此外,什麼是結構化的數據,如果這種類型的過濾是不可能的正確方法是什麼?我是否需要擁有一個非規範化的MyEvent實體以及所有可以過濾的字段?

回答

0

正如你在讀Objectify documentation,參考屬性是更大的客體糖比數據存儲功能。它們作爲密鑰屬性存儲在數據存儲中,因此無法根據密鑰可能指向的實體的屬性進行查詢。

如果您想要查詢城市內的事件,您可以將事件的城市存儲在事件本身上並根據該事件進行查詢,或查詢城市內的所有位置,然後查詢與這些位置匹配的任何事件(即通過查詢存儲在事件上的位置鍵)。第三種選擇是將城市變爲具有事件收集類型字段的實際實體。您還可以使用祖先查詢 - 請參閱「Datastore Queries」文檔以獲取更多信息。

+0

感謝您確認我的預感。你的建議有一個集合類型的事件或祖先查詢字段聽起來是一個很好的方式來完成這個。 – TriArc