0

我有以下模型,其中一个Thing可以有多个Action

class Thing(polymodel.PolyModel):
    create_date = db.DateTimeProperty(required=True)

class Action(db.Model):
    thing = db.ReferenceProperty(Thing, collection_name='action')    
    action_by = db.StringProperty(required=True)

我需要使用原始 GQL 来计算Thing没有操作的 s 的数量。它应该是这样的:

SELECT * FROM Thing WHERE action = []

我有以下限制:

  1. 我必须使用原始 GQL(因为实际查询包含常规查询不支持的 DISTINCT)。
  2. 我无法获取数据并检查内容,因为我使用远程 api 并且只想计算数据以节省带宽。

可以做到吗?

4

1 回答 1

3

首先,你完全错误地说你必须使用 GQL,因为普通查询不支持 DISTINCT:你可以用 GQL 做任何事情,而你不能用普通查询做。数据存储不是数据库,并且没有 ORM 调用必须翻译成的底层查询语言;相反,实际上 GQL 调用被翻译成 RPC 调用的方式与模型调用完全一样,使用 GQL 完全没有任何好处。在这种特定情况下,Query有一个distinct参数。

但是,数据存储不是 SQL 数据库的另一个含义是您不能执行 JOIN。无法根据 Action 中的任何属性选择 Thing 实例,无论是特定字段值还是不存在任何关系。做到这一点的唯一方法是获取 的所有不同值Action.thing,然后是所有Things,并计算出集合差。

于 2013-10-20T13:37:17.000 回答