エンティティ 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 の回答を読んだ後、アプリケーションを再設計しました。驚いたことに、今ではすべてがずっとシンプルに見えます。追加の利点は、エンティティが使用するスペースが少なくなり、追加のインデックスが必要なくなることです。