2

KeyProperty の祖先 (親) に基づいてクエリを実行することは可能ですか?

EG、次のようなもの:

class Foo(ndb.Model):
    bar = ndb.KeyProperty()

Foo.query().filter(Foo.bar.parent == some_key)

つまり、bar キーの親が some_key である bar キーを持つすべての foo を見つけたいとします。

bar可能であれば、の親を別のキー プロパティとして保存する必要はありません。基本的に、KeyProperty で祖先クエリを実行したいのですが、可能であれば、それを行う方法がわかりませんでした。

私の現在の解決策は、 ComputedProperty を使用してバーの親を抽出し、それを別のフィールドとして保存することです。これは機能しますが、親キーをバーキーの一部として既に保存しているため、不要なようです。

4

1 に答える 1

6

はい、これは祖先クエリと呼ばれます。

Foo.query(ancestor=some_key)

アップデート:

コメントでの会話の後、私たちは望ましい結果をクリアしました。クエリは、問題のプロパティにインデックスが付けられている場合にのみ機能します。計算されたプロパティを使用し、その値をクエリすることで、親にインデックスを付けることができます。キーが返されるので.parent()、これは問題にはなりません。

class Foo(ndb.Model):
  bar = ndb.KeyProperty()
  bar_parent = ndb.ComputedProperty(lambda self: self.bar.parent())

Foo.query(Foo.bar_parent == some_key)
于 2012-11-12T03:16:03.363 に答える