これは少し遅れていますが、同じ問題を抱えている人には役立ちます。
解決策は、最初にキーのみのクエリを実行し、直接の子孫であるキーのサブセットを取得することです。
キーのサブセットを使用すると、目的のエンティティをバッチで取得できます。
私はここに行くの例ですが、pythonのに慣れていないよ:
directDescKeys := make([]*datastore.Key, 0)
q := datastore.NewQuery("A").Ancestor(parentKey).KeysOnly()
for it := q.Run(ctx);; {
key, err := it.Next(nil)
if err == datastore.Done {
break
} else if err != nil {
// handle error
}
if reflect.DeepEquals(key.Parent(), parentKey) {
directDescKeys = append(directDescKeys, key)
}
}
entities := make([]*A, len(directDescKeys))
if err := datastore.GetMulti(ctx, directDescKeys, entities); err != nil {
// handle error
}
はまた、祖先クエリの結果は、実際にも、(彼らはすべて同じ種類を持っていると仮定)が含まれていることに注意してください。ルートがレベル0、直接的な子がレベル1、子レベル2が、そしてoがそれぞれのエンティティに「レベル」のプロパティを持つこともできます。 –