【发布时间】:2012-10-18 12:39:14
【问题描述】:
我想获得一个知道实体 ID 和祖先的实体密钥。 ID 在由祖先定义的实体组中是唯一的。 在我看来,使用 ndb 接口是不可能的。据我了解数据存储,这可能是由于此操作需要执行完整索引扫描这一事实引起的。 我使用的解决方法是在模型中创建一个计算属性,该属性将包含键的 id 部分。我现在可以进行祖先查询并获取密钥
class SomeModel(ndb.Model):
ID = ndb.ComputedProperty( lambda self: self.key.id() )
@classmethod
def id_to_key(cls, identifier, ancestor):
return cls.query(cls.ID == identifier,
ancestor = ancestor.key ).get( keys_only = True)
似乎可行,但是有没有更好的解决方案来解决这个问题?
更新 似乎对于数据存储,自然的解决方案是使用完整路径而不是标识符。一开始我觉得会很累。在阅读了 Dragonx 的答案后,我重新设计了我的应用程序。令我惊讶的是,现在一切看起来都简单多了。额外的好处是我的实体将使用更少的空间,并且我不需要额外的索引。
【问题讨论】:
-
听起来你得到了正确的答案!
-
ID 不保证在实体组中唯一 - 仅适用于给定的父实体。
标签: google-app-engine app-engine-ndb