これは少し遅いですが、同じ問題を抱えている人には役立ちます。
解決策は、最初にキーのみのクエリを実行し、直接の子孫であるキーのサブセットを取得することです。
そのキーのサブセットを使用して、目的のエンティティをバッチ取得できます。
私はPythonに慣れていないので、goの例を次に示します。
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
}