Существует оператор no ANCESTOR IN
, только ANCESTOR IS
- другими словами, вы можете легко найти детей одного A
, но не многих.Далее будут найдены все B
сущности, которые являются потомками определенного A
.
parent_key = db.Key.from_path('A', parent_key_name)
children_of_a = B.all().ancestor(parent_key).fetch(100)
Очень важно понимать, что все IN
запросы в App Engine используютнесколько запросов за кулисами.Если вы добавляете родительское свойство для запроса и используете хранилище данных с высокой репликацией (так и должно быть), вам также необходимо понимать нюансы запросов к групповым объектам - они не будутбыть строго последовательным.Таким образом, если вы ожидаете очень небольшой список родителей (скажем, одного или двух) в большинстве случаев и вам нужна строгая согласованность, возможно, вам лучше выполнить несколько запросов предков.Если у вас, как правило, много родителей, и возможная последовательность нормальна, добавьте свойство, по которому можно запросить запрос.