0

我有以下問題:谷歌App Engine數據存儲查詢問題

我想檢索類別的所有產品

class Category(emodel): 
     name = db.StringProperty() 

class Channel(emodel): 
     name = db.StringProperty() 
     category = db.ReferenceProperty(Category,collection_name="cat_set") 

class Product(emodel): 
     name = db.StringProperty() 
     channel = db.ReferenceProperty(Channel,collection_name="ch_set") 

現在,我想編寫一個GQL查詢該retrive所有一類的產品。 例如:

Product.gql("WHERE channel.category == KEY (:1)", category_selected_key) 

請記住,每個通道可以經常改變其類別,所以我喜歡的東西快,以避免額外的工作,爲CPU

感謝

回答

1

隨着GQL你可以」 t做一個'嵌套'的查詢,在SQL中使用連接來過濾被引用實體的屬性。

因爲你的產品實體引用只存儲稱作通道實體的按鍵,你必須首先做的另一個查詢來獲取你想要檢索類別的關鍵:

selected_channel = Channel.gql("WHERE category = :1", category_selected_key).get() 

category_products = Product.gql("WHERE channel = :1", selected_channel).fetch() 
2

的App Engine數據存儲不支持連接(您在此隱式嘗試執行)。解決這個問題的最簡單方法是從產品添加一個ReferenceProperty到Category,使用與產品的Channel類別相同的值,從而非規範化它,以便您可以簡單地進行查詢。

相關問題