在Google App Engine中搜索模型关系?

时间:2010-05-25 17:26:29

标签: google-app-engine google-cloud-datastore

我有2个型号:

class Parent (db.Model) :
  data = db.StringProperty()


class Child1 (db.Model) :
  parent = db.ReferenceProperty(Parent)
  childData = db.StringProperty()

class Child2 (db.Model) :
  parent = db.ReferenceProperty(Parent)
  childData2 = db.StringProperty()

class Child3 (db.Model) :
  parent = db.ReferenceProperty(Parent)
  childData3 = db.StringProperty()

...

我想要一个查询,它可以列出所有没有孩子的父母的列表。我该怎么做?

我不想在每个子节点的Parent模型中维护一个标识符,因为我想经常添加新的子模型。

1 个答案:

答案 0 :(得分:1)

处理此问题的正确方法是在您的Parent实体中保留子项数。然后,您可以简单地查询子计数等于0的父母。

您不需要在Parent实体中拥有子ID;你想保留计算孩子的数量。孩子是一种模型还是另一种模型并不一定重要。保持这种运行计数的目的是它使您能够解决您的问题,即查询没有孩子的父母。数据存储区或提供此功能的AppEngine查询对象没有本机功能。

因此,由于本地不支持,您可以选择以下两种方式之一:

1)保持孩子数量的运行计数,无论何时添加或删除孩子,都要递增或递减;

2a)查询每种类型的每个孩子并记录父母的唯一值。

2b)查询所有Parent实体,并将它们与来自2a

的唯一父ID进行匹配

我会留给你决定哪种方法是正确的。