現在、DataStore を使用する AppEngine アプリケーションのモデル構造は次のとおりです (わかりやすくするために省略しています)。
class User(db.Model):
name = db.StringProperty()
class Game(db.Model):
name = db.StringProperty()
class UserGame(db.Model):
user = db.ReferenceProperty(User)
game = db.ReferenceProperty(Game)
high_score = db.IntegerProperty()
多くのゲームがあり、多くのユーザーがいます。(疑似) SQL に相当するものと同様に、ユーザーが参加していないゲームのリストをクエリしようとしていますSELECT * from Game where name NOT IN (SELECT * from UserGame where user = <<current_user>>)
私の最初のアプローチは、UserGames のリストを取得し、そのリストを繰り返し処理して追加すること.filter('__key__ !=',<<user_key>>)
でしたが、不等式フィルターをチェーンすることはできません。
私の質問は、私が必要とするデータを取得するために人々が想像できるより良いモデリングのアイデアはありますか、それともすべてを CloudSQL に移行する必要があるかということです。現在使用しているモデルを使用して、データストア レベルでこの情報を取得する方法がわかりません。
そのユーザーの UserGame のリストを保持し、Game.all() を取得し、プログラムで結果を除外することで、プログラムでこれを実行できることはわかっていますが、Cursor を使用したいので、これは理想的ではありません。結果を改ページします。
助けてくれてありがとう!