我最近看到一些文章指出要扁平化 NoSQL 数据库的数据。来自传统的 SQL 数据库,我意识到我正在 GAE 中复制 SQL 数据库行为。所以我开始尽可能地重构代码。
例如,我们有一个社交媒体网站,用户可以在其中互相成为朋友。
class Friendship(ndb.Model):
from_friend = ndb.KeyProperty(kind=User)
to_friend = ndb.KeyProperty(kind=User)
该应用程序有效地在两个用户之间创建了一个友谊实例。
friendshipA = Friendship(from_friend = UserA, to_friend = userB)
friendshipB = Friendship(from_friend = UserB, to_friend = userA)
我现在怎么能把它移到实际的用户模型上来展平它。我想也许我可以使用 StructuredProperty。我知道它仅限于 5000 个条目,但这对朋友来说应该足够了。
class User(UserMixin, ndb.Model):
name = ndb.StringProperty()
friends = ndb.StructuredProperty(User, repeated=True)
所以我想出了这个,但是用户不能指向自己,所以看起来。因为我得到一个NameError: name 'User' is not defined
知道如何将其展平,以便单个 User 实例包含其所有朋友及其所有属性吗?