【问题标题】:Google App Engine Datastore query problemGoogle App Engine Datastore 查询问题
【发布时间】:2010-02-03 08:26:26
【问题描述】:

我有以下问题:

我想检索一个类别的所有产品

class Category(emodel):
      name = db.StringProperty()

class Channel(emodel):
      name = db.StringProperty()
      category = db.ReferenceProperty(Category,collection_name="cat_set")

class Product(emodel):
      name = db.StringProperty()
      channel = db.ReferenceProperty(Channel,collection_name="ch_set")

现在我想编写一个 gql 查询来检索一个类别的所有结果。 例如:

Product.gql("WHERE channel.category == KEY (:1)", category_selected_key)

请记住,每个频道都可以经常更改其类别,所以我想要一些快速的东西以避免 CPU 的额外工作

谢谢

【问题讨论】:

    标签: google-app-engine google-cloud-datastore referenceproperty


    【解决方案1】:

    App Engine 数据存储区不支持连接(您在此处隐式尝试这样做)。解决此问题的最简单方法是将 Product 中的 ReferenceProperty 添加到 Category 中,其值与 Product 的 Channel 的 Category 相同,从而对其进行非规范化以便您可以简单地查询。

    【讨论】:

      【解决方案2】:

      使用 GQL,您无法像在 SQL 中(使用连接)那样在被引用实体的属性上进行过滤的“嵌套”查询。

      由于您的 Product 实体中的引用仅存储引用的 Channel 实体的键,因此您必须先执行另一个查询才能检索您尝试检索的类别的键:

      selected_channel = Channel.gql("WHERE category = :1", category_selected_key).get()
      
      category_products = Product.gql("WHERE channel = :1", selected_channel).fetch()
      

      【讨论】:

        猜你喜欢
        • 2015-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-07
        • 1970-01-01
        相关资源
        最近更新 更多