我有一个这样的模型:
class Person(db.Model):
...
zipcode = db.StringProperty()
class Book(db.Model):
owner = db.ReferenceProperty(Person)
date_created = db.DateTimeProperty(auto_add=True)
如何获取按date_created
降序排序的特定邮政编码中所有书籍的列表?
我有一个这样的模型:
class Person(db.Model):
...
zipcode = db.StringProperty()
class Book(db.Model):
owner = db.ReferenceProperty(Person)
date_created = db.DateTimeProperty(auto_add=True)
如何获取按date_created
降序排序的特定邮政编码中所有书籍的列表?
将 Greg 的回答更进一步,对 App Engine 数据存储区的正确做法是非规范化:
class Person(db.Model):
...
zipcode = db.StringProperty()
class Book(db.Model):
owner = db.ReferenceProperty(Person)
date_created = db.DateTimeProperty(auto_add=True)
zipcode = db.StringProperty()
设置所有者时,您必须小心设置图书的邮政编码。之后,将您想要的查询作为单个查询执行非常简单。Greg 的解决方案成本更高,因为您需要执行多个查询并获取许多实体才能进行合并。对于大型数据集,它也很慢,并且您可能会面临各种提取操作超时以及合并操作需要很长时间和大量内存的风险。
您必须使用您要查找的邮政编码查询所有 Person 实体,然后查找他们的每本书,合并列表,然后对结果进行排序。
通常,像对关系数据库所做的规范化并不是使用数据存储进行建模的最佳方式。