我有2个实体模型
class User(ndb.Model):
username = ndb.StringProperty()
# other properties
class Item(ndb.Model):
type = ndb.StringProperty()
# other properties
User
和Item
class UserItem(ndb.Model):
user = ndb.KeyProperty(kind=User)
item = ndb.KeyProperty(kind=Item)
# other properties
如何使用UserItem
过滤器查询Item.type
。像select * from UserItem where UserItem.user = user_key and UserItem.item.type = item_type
这样的东西。
我知道我可以用StructuredProperty
来做,但实体限制为1mb。如果模型不可能,我应该如何建模关系以获得数据存储区中过滤器工作的查询?
由于
答案 0 :(得分:2)
你不能这样做,你不应该尝试。数据存储区不是关系数据库,不应该用作一个数据存储区。
您应该考虑在其中一个实体中存储密钥列表,而不是使用链接UserItem表。例如,您可以向用户添加字段:
items = ndb.KeyProperty(kind=Item, repeated=True)
然后使用您的User对象,按键获取项目并过滤掉您需要的项目:
user_items = ndb.get_multi(my_user.items)
relevant_items = [item for item in user_items if item.type == my_type]
确切的结构将取决于您的用例,但关键是不要像在SQL中那样考虑传统关系。