目前,对于使用 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(),并以编程方式过滤掉结果,但这并不理想,因为我想使用光标对结果进行分页。
谢谢大家的帮助!