Запрос Google App Engine (не фильтр) для дочерних объектов сущности
-
22-08-2019 - |
Вопрос
Доступны ли дочерние элементы сущности в запросе?
Данный:
class Factory(db.Model):
""" Parent-kind """
name = db.StringProperty()
class Product(db.Model):
""" Child kind, use Product(parent=factory) to make """
@property
def factory(self):
return self.parent()
serial = db.IntegerProperty()
Предположим, 500 фабрик произвели 500 продуктов, в общей сложности 250 000 продуктов.Есть ли способ сформировать ресурсоэффективный запрос, который будет возвращать только 500 продуктов, произведенных одним конкретным заводом?Метод-предок является фильтром, поэтому, используя, например.Product.all().ancestor(factory_1) потребует повторных вызовов хранилища данных.
Решение
Хотя предок описывается как «фильтр», на самом деле он просто обновляет запрос, добавляя условие предка.Вы не отправляете запрос в хранилище данных, пока не выполните итерацию запроса, поэтому то, что у вас есть, будет работать нормально.
Однако есть один небольшой момент:500 сущностей с одним и тем же родителем могут ухудшить масштабируемость, поскольку записи сериализуются для членов группы сущностей.Если вы просто хотите отслеживать фабрику, производящую продукт, используйте ReferenceProperty:
class Product(db.Model):
factory = db.ReferenceProperty(Factory, collection_name="products")
Затем вы можете получить все продукты, используя:
myFactory.products