2015-08-28 71 views
0

我想要有幾個「捆綁」(Mjbundle),它們基本上是一堆問題(Mjquestion)。 Mjquestion有一個整數「索引」屬性,它必須是唯一的,但它應該在包含它的包中唯一。我不確定如何正確建模這樣的東西,我嘗試使用下面的結構化(重複)屬性來做到這一點,但實際上並沒有限制Mjquestion索引的唯一性。什麼是更好/正常/正確的做法?如何在GAE中建模一個唯一的約束ndb

class Mjquestion(ndb.Model): 
    """This is a Mjquestion.""" 
    index = ndb.IntegerProperty(indexed=True, required=True) 
    genre1 = ndb.IntegerProperty(indexed=False, required=True, choices=[1,2,3,4,5,6,7]) 
    genre2 = ndb.IntegerProperty(indexed=False, required=True, choices=[1,2,3]) 
    #(will add a bunch of more data properties later) 

class Mjbundle(ndb.Model): 
    """This is a Mjbundle.""" 
    mjquestions = ndb.StructuredProperty(Mjquestion, repeated=True) 
    time = ndb.DateTimeProperty(auto_now_add=True) 

(通過上述模型,並已經獲取了一定Mjbundle實體,我不知道如何根據指數從mjquestions快速獲取一個Mjquestion。在結構性能上過濾的解釋看起來像它的工作原理上Mjbundle類型的級別,而我已經有一個Mjbundle實體,並不確定如何快速查詢該實體所包含的問題,而無需在代碼中「手動」遍歷所有這些實體。)

所以我很樂意任何有關如何更好地做到這一點的建議。

  • 我讀這信息的回答:https://stackoverflow.com/a/3855751/129202它提供了有關可擴展性和與此相關的,我將期待只是一對夫婦束但每個包都會有數以千計的問題的一些想法。

  • 也許我不應該使用Mjbundle的mjquestions屬性,而應該關注於父母:創建的每個Mjquestion都應該有一個Mjbundle實體作爲父對象。然後「手動」通過執行祖先查詢來在「插入時間」執行唯一性。

+0

第一個問題是什麼決定了用例的唯一性。它是整數還是捆綁的其他方面。每個包可以是一個小孩的實體(在這裏講數據存儲鍵),並讓數據存儲生成該ID。它是獨一無二的。在所有的孩子中。 –

回答

0

當您使用StructuredProperty,所​​有類型的存儲爲包含實體的一部分實體的 - 所以,當你取你的包,你已經獲取所有的問題。如果你堅持這種存儲方式,迭代檢查代碼就是解決方案。

+0

好吧我想我的情況下,我期望在那裏有成千上萬的實體,這聽起來不是很可行。謝謝你清理那個。我會用父母代替。 – Jonny