2014-09-03 52 views
0

你好我是Datastore和Python的新手,我有一個基本問題,但它可以幫助我更多地瞭解Google雲。數據存儲App Engine查詢祖先python

我有4個實體,讓我們說我有一個父母(比賽)與孩子:團隊,球員和事件。

class Team(ndb.Model): 
    d_name = ndb.StringProperty() 
    d_side = ndb.StringProperty() 

class Player(ndb.Model): 
    d_name = ndb.StringProperty() 
    date_of_birth = ndb.StringProperty() 
    d_position = ndb.StringProperty() 
    d_teamKey = ndb.StringProperty() 


class Match(ndb.Model): 
    d_competition_name = ndb.StringProperty() 
    d_date = ndb.StringProperty() 
    d_pool = ndb.StringProperty() 
    d_season = ndb.StringProperty() 
    d_team1Key = ndb.StringProperty() 
    d_team2Key = ndb.StringProperty() 
    d_winning_teamKey = ndb.StringProperty() 
    d_match_id = ndb.StringProperty() 
    d_match_day = ndb.IntegerProperty() 

class Event(ndb.Expando): 
    d_teamKey = ndb.StringProperty() 
    d_playerKey = ndb.StringProperty() 

我知道查詢,如果我想所有4配襯一天是:

q = ndb.gql("SELECT * FROM Match WHERE d_match_day = 4") 

但我怎麼能SEACH在論文比賽的孩子們所有的球員,所以,我都誰擁有的球員白天玩4?

謝謝!

回答

0

等待....你把球員添加爲他每場比賽的小孩嗎?這似乎是沒有效率的設計。一個孩子只能有一個父母(除非我嚴重誤解了祖先的查詢,這可能是公平的)。

無論如何,在一個單一的查詢中,我不認爲這是可行的。我將開始從d_match_day = 4的匹配項中獲取密鑰,然後從那裏執行「select * from Players where match_key =」並使用剛剛創建的列表。 (您可能需要更改match_key以符合您的實際祖先的關鍵,但它的JIST是存在的)

1

添加另一個屬性Match:一個StructuredProperty,這是播放器(和/或團隊)的列表:

Players = ndb.StructuredProperty(Player) 
Teams = ndb.StructuredProperty(Team) 

然後,您可以查詢4並拉出球員和/或球隊列表。

相關問題