Sla*_*waj 7 google-app-engine app-engine-ndb
我想获得一个知道实体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)
Run Code Online (Sandbox Code Playgroud)
它似乎有效,但有没有更好的解决方案来解决这个问题?
更新 似乎对于数据存储,自然的解决方案是使用完整路径而不是标识符.最初我认为这太麻烦了.阅读dragonx后,我重新设计了我的应用程序.令我惊讶的是,现在看起来一切都变得简单了.额外的好处是我的实体将使用更少的空间,我不需要额外的索引.
我也遇到了这个问题.我想你确实有解决方案.
更好的解决方案是停止使用ID引用实体,并存储实际密钥或完整路径.
在内部,我使用密钥而不是ID.
在我的rest API上,我曾经做过http://url/kind/id(其中id看起来像"123")来获取一个实体.我修改了它以提供实体的完整祖先路径: http://url/kind/ancestor-ancestor-id(789-456-123),然后我解析该字符串,生成密钥,然后按键获取.
| 归档时间: |
|
| 查看次数: |
4799 次 |
| 最近记录: |