1

シナリオ1: 曽祖父の祖先がいる場合(彼にAという名前を付けましょう)。そして私の鍵は「child1」からです。私の曽祖父がAであることを確認する方法はありますか?(ループせずにそれができることを願っています)

または、child1のキーがパス「A->B->C」にあるかどうかを確認できますか。
A-> B-> C->(child1、child2 ...)

シナリオ2: 上記から。曽祖父には「G」の子孫がもう1人いて、「H」の子を取得したいと考えています。

A-> B-> C->(Cの子)
...-> G-> H->(Hの子)

おじいちゃんがA、G、Hへの道を知っていると思って、「H」の子供を取り戻すのが好きです...それはできますか?(ループせずにクエリでこれを実行できることを願っています)

Go1の例がある場合:それは素晴らしいでしょう...

4

1 に答える 1

2

シナリオ1:

子1の曽祖父がAであることを確認する場合は、key.getParent()を2回呼び出す必要があります(nullの親を確認します)。これを確認するためのAPIはありません。

エンティティXに祖先としてAがあることを確認する場合は、key.getParent()をN回呼び出す必要があります。

ただし、オーバーヘッドは最小限であることに注意してください。key.getParent()を呼び出しても、実際のデータストアは呼び出されません。

もちろん、祖先クエリを使用して、C /エンティティXがAの子孫であることを確認できます(シナリオ2が示すように)。したがって、クエリ結果のチェックを回避します。クエリ実行時のデータストアがこれをチェックします。

https://developers.google.com/appengine/docs/java/datastore/queries= >祖先クエリを検索 https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api /datastore/Query#setAncestor(com.google.appengine.api.datastore.Key

childCQuery.setAncestor(entityA.getKey());

シナリオ2:

おじいちゃん「A」は「H」へのパスを知ることができません。これは、子がいつでも追加および削除できるためです。どのエンティティが「A」の子孫になることができるかについての制限はありません。したがって、データストアクエリを使用した場合にのみ、「A」の子孫を判別できます。

ただし、シナリオ1で述べたように、クエリの祖先として「A」を指定すると、「A」が祖先ではない結果をフィルタリングできます。

これがあなたの質問に答えることを願っています。

注:あなたの質問に対する私の回答は、JavaAPIを参照しています。私はまだGoAPIに精通していません。

ありがとう。

アミール

于 2012-06-25T07:02:18.563 に答える