我想获得一个知道实体 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 的答案后,我重新设计了我的应用程序。令我惊讶的是,现在一切看起来都简单多了。其他好处是我的实体将使用更少的空间,并且我不需要额外的索引。