0

私は次のモデルを持っています。1つ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)

Thingアクションのない の数をカウントするには、生の GQL を使用する必要があります。次のようになります。

SELECT * FROM Thing WHERE action = []

次の制限があります。

  1. 生の GQL を使用する必要があります (実際のクエリには、通常のクエリではサポートされていない DISTINCT が含まれているため)。
  2. リモートAPIを使用しているため、帯域幅を節約するためにデータのみをカウントしたいため、データを取得して内容を確認することはできません。

それはできますか?

4

1 に答える 1

3

まず、通常のクエリは DISTINCT をサポートしていないため、GQL を使用する必要があると言うのは完全に間違っています。通常のクエリでできないことで GQL を使用できることはありません。データストアはデータベースではなく、ORM 呼び出しを変換する必要がある基になるクエリ言語がありません。それどころか、実際には GQL 呼び出しはモデル呼び出しとまったく同じ方法で RPC 呼び出しに変換され、GQL を使用する利点はまったくありません。この特定のケースでは、Queryクラスdistinctパラメーターがあります。

ただし、データストアが SQL データベースではないという別の意味は、JOIN を実行できないことです。Action のプロパティに基づいてモノのインスタンスを選択する方法はありません。それが特定のフィールド値であるか、関係がないかです。これを行う唯一の方法は、 のすべての個別の値を取得してから、すべての を取得Action.thingThings、集合の差を計算することです。

于 2013-10-20T13:37:17.000 に答える