google-app-engine - 如何在 GQL 中选择没有引用另一个模型类的所有行?

标签 google-app-engine gql gqlquery

我有

class Question(db.Model):
    wording = db.StringProperty(required=True)

class Answer(db.Model):
    question = db.ReferenceProperty(Question, required=True)
    userId = db.IntegerProperty(required=True)

我也想

SELECT * FROM Question WHERE Id NOT IN (
       SELECT QuestionId FROM Answer WHERE userId = 1)

如何在 GQL 中执行此操作

最佳答案

GQL 没有 NOT IN 语句,因此遗憾的是,它无法完全按照您的要求进行操作。

如果 userId 的总集很小,您可以反转查询以使用 IN 语句。例如:

SELECT * FROM Answer WHERE userId IN ('2', '3')

请注意,这是对 IN 语句中的每个值执行一个子查询,并且每个 GQL 语句最多允许 30 个查询。

如果 userId = 1 的答案总数较小,您可以选择所有答案并在自己的代码中过滤掉 userId = 1 中的答案。但是,如果来自 userId 1 的答案集很大,则效率不会特别高。

最后,您可以使用 cron 来预先计算结果(并将它们存储到数据存储和/或内存缓存中),而不是按需计算这些查询。当您的代码需要这些查询之一的结果时,您可以加载缓存的结果。

关于google-app-engine - 如何在 GQL 中选择没有引用另一个模型类的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10476085/

相关文章:

android - Cloud Endpoints 在 Android/iOS 客户端库中生成实体 key

java - App Engine:端点未更新

python - 在 Google App Engine 中部署应用程序时出现内存错误

java - 如何从 GAE 数据存储中查询带有转义值的数据?

google-app-engine - GQL查询: Delete duplicate rows in GQL from the datastore viewer

python - Google App Engine python,GQL,仅从数据存储中选择一列

java.lang.NullPointerException : No API environment is registered for this thread

java - Google Cloud Datastore - Java - GQLQuery 游标

google-app-engine - 使用 GQL 查找列中的最大值

google-app-engine - 如何在 GQL 中查询过去 6 小时(日期时间)的所有条目?