【问题标题】:Need to order by properties in the reference property, any good solution?需要按参考属性中的属性排序,有什么好的解决方案吗?
【发布时间】:2011-03-20 23:11:58
【问题描述】:

假设我有 2 种:

class Account(db.Model):
  name = db.StringProperty()

  create_time = db.DataTimeProperty()
  last_login = db.DateTimeProperty()
  last_update = db.DataTimeProperty()


class Relationship(db.Model)
  owner = db.ReferenceProperty(Account)
  target = db.ReferenceProperty(Account)
  type = db.IntegerProperty()

我想得到以下查询的等价物:

SELECT target 
FROM Relationship
WHERE owner = :key AND type = :type
ORDERBY target.last_login DESC 

怎么做?

参考:http://www.mail-archive.com/google-appengine@googlegroups.com/msg15878.html

【问题讨论】:

  • 罗伯特,英文是'Type'而不是'kind'
  • “种类”是 App Engine 数据存储区中使用的术语。
  • 哦,我明白了。把自己弄傻了。 :P

标签: google-app-engine join gql


【解决方案1】:

数据存储区中没有对应的查询。几点:

  1. 您不能选择单个属性。 SELECT 始终为 SELECT *(您选择整个实体)。
  2. 您不能进行联接。您需要对模型进行非规范化以适应您将要执行的查询或执行多个查询。

因此,为了实现您的目标,您需要将 last_login 存储在 Relationship 中,或者使用第三个模型作为该特定查询的索引。

【讨论】:

  • 将 last_login 存储在关系中并不理想,因为这将需要更新很多行,如果成本太高。
  • Robert:数据存储不能像关系数据库那样进行连接,因此您唯一的选择是将要排序的字段包含在您正在查询的 Kind 中,或者在内存中进行排序.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
相关资源
最近更新 更多