2011-05-15 34 views
2

你好我想列出播放列表至極由給定的藝術家爲我所鍵名稱包含的歌曲,我的型號有:幫助,資料儲存庫查詢

**playlist** 
songs = db.ListProperty(db.Key) 

**Song** 
artist = db.ReferenceProperty(Artist,collection_name='songs') 

**Artist** 
Key Name = john-lennon 

所以播放列表中的歌曲鍵的列表,以及一個歌曲包含對藝術家的引用。

任何幫助,將不勝感激,我的查詢一直是簡單到目前爲止即時通訊現在有點失去了:-)

回答

3

你不能真正做到查詢像這樣與GAE。數據存儲區不是關係數據庫,不會像JOIN那樣執行任何操作。

你能做的最好的是讓所有那些藝術家約翰·列儂的歌曲,然後找到這些歌曲的播放列表:

songs = GqlQuery('SELECT __key__ FROM song WHERE artist = :1', 'john-lennon') 
playlists = GqlQuery('SELECT * FROM playlist WHERE songs IN :1', songs) 

注意,即使這樣也有問題,如果你有超過30個John Lennon的歌曲 - 如文檔所述:

注意:IN和!=運算符在幕後使用多個查詢。例如,IN運算符爲列表中的每個項目執行單獨的基礎數據存儲區查詢。返回的實體是所有基礎數​​據存儲區查詢的交叉產物的結果,並且被重複刪除。任何單個GQL查詢最多允許30個數據存儲區查詢。