6

实体的子实体在查询中可用吗?

鉴于:

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) 将需要重复调​​用数据存储。

4

1 回答 1

8

虽然祖先被描述为“过滤器”,但它实际上只是更新查询以添加祖先条件。在迭代查询之前,您不会向数据存储发送请求,因此您所拥有的将正常工作。

一个小问题:500 个具有相同父级的实体可能会损害可伸缩性,因为写入被序列化到实体组的成员。如果您只想跟踪制造产品的工厂,请使用 ReferenceProperty:

class Product(db.Model):
   factory = db.ReferenceProperty(Factory, collection_name="products")

然后,您可以使用以下方法获取所有产品:

myFactory.products
于 2009-02-13T10:43:02.233 回答