在google-app-engine中使用GQL实现连接查询

时间:2011-03-23 05:44:06

标签: google-app-engine join gql

我有一个类似的实体:

prop1 prop2 docid other-properties

str1 p1 1001 .........

str2 p1 1002 .........

str2 p2 1001 .........

str1 p2 1003 .........

我希望所有那些将“prop1 as str1和prop2 as p1”和“prop1 as str2 and prop2 as p2”共同使用并且想要使用其他属性的docid。就像这里的答案是docid 1001.任何人都可以建议我这样做吗?我甚至准备好在需要时更改我的数据库结构,但我希望这些事情只能由一个查询来完成......

关于我可能不需要使用它们的其他属性,这很好,我只想要所有常用的docid。

现在我正在使用这样的东西:

表示db.GqlQuery中的b(“SELECT * FROM b”):
    for db.GqlQuery(“SELECT * FROM a WHERE y =:1”,b.y):
          打印a.x

但是由于我有大量的参赛作品,这需要花费很多时间。

1 个答案:

答案 0 :(得分:1)

对此进行建模的最简单方法是让文档本身有一个字符串列表:

class Doc(db.Model):
  strings = db.StringListProperty()

然后,您可以像这样查询该列表中的多个字符串:

q = Doc.all().filter('strings =', 'str1').filter('strings =', 'str2').get()

默认情况下,这将使用合并连接策略,因此不需要您构建任何自定义索引。