1

一對多的關係我有以下型號...許多與NDB在谷歌應用程序引擎

class User(ndb.Model): 
    email = ndb.StringProperty() 
    username = ndb.StringProperty(indexed=True) 
    password = ndb.StringProperty() 

class Rel(ndb.Model): 
    user = ndb.KeyProperty(kind=User, indexed=True) 
    follows = ndb.KeyProperty(kind=User, indexed=True) 
    blocks = ndb.KeyProperty(kind=User) 

我想使它這樣用戶可以按照或阻止用戶的任何其它號碼。

使用上述設置,我發現很難執行,將是很容易與傳統的DBMS任務。

舉一個簡單的例子,我怎麼會找到所有在心中的使用者名稱,保持給定用戶的追隨者和秩序,當我執行上相對查詢,我取回鑰匙,而不是用戶對象?

我該怎麼做呢?

+2

在Rel實體中存儲冗餘信息以幫助您查詢。例如存儲以下密鑰的用戶名,因此您不必執行提取操作。這不是您在RDBMS中所做的,而是您將如何處理數據存儲。 –

回答

2

你必須做一個獲取,但你可以去以更好的方式設計它,

的遵循和塊字段可以是列表,而不是僅僅關鍵 - 在此之後

follows = ndb.KeyProperty(kind=User, repeated=True) 
blocks = ndb.KeyProperty(kind=User, repeated=True) 

當你需要此用戶的以下內容,您可以獲取密鑰並執行ndb.get_multi(Keys_list)以獲取所有後續/塊實體,無論您需要什麼。

OR

這樣做的更好的辦法 -

如果你關心的秩序,要進行分頁,你將不得不單獨 存儲所有的跟蹤/塊的實體,例如,如果這是關於一個用戶「A」

跟隨實體將記錄每個人的「一」如下

class FollowEntity(ndb.Model): 
    user = ndb.KeyProperty(kind=User) 
    follow = ndb.KeyProperty(kind=User) 
    follow_username = ndb.StringProperty() 

查詢可以 假設user是從「用戶」實體的條目。

您可以運行此查詢,並得到排序結果的用戶名,如果您使用fetch_page顯示在一個批次的結果會很好地工作。

對BlockEntity也一樣