GAE:如何查询特定文档中引用的项目?
GAE: how do I query for an item that is referenced in a specific document?
我有 City
-> District
,我需要在指定的 City
中找到具有指定的 name
的 District
,如果有的话。
代码:
class City(ndb.Model):
districts = ndb.KeyProperty(kind=District, repeated=True)
class District(ndb.Model):
name = ndb.StringProperty()
我该怎么做?
我相信你可能会安排你的模式来更有效地完成这项任务——例如,让城市成为该地区的祖先,使用城市名称或其他唯一的城市 ID,后跟地区名称,在地区实体键,或对模式进行反规范化,以便每个地区冗余地记录其城市以提高搜索速度。
但是,我想您可能还有其他并发症阻碍了这些优化。如果您满意,
def fetch_district_in_city(city, district_name):
query = District.query(ndb.AND(District.name == district_name,
District.key.IN(city.districts)))
return query.fetch()
可能工作得很好——它 returns 如果该城市中没有该名称的地区,则它是一个空列表,否则它可能只有一个项目(假设城市中的地区名称是唯一的)。
我认为这不太可能完全令人满意的原因(与我上面提到的优化方案相比)是 IN
方法 "explodes" 对很多 OR
和 ==
检查,如 https://cloud.google.com/appengine/docs/python/ndb/queries#neq_and_in 中所述,用于有很多地区的城市。因此,您的应用程序的性能可能会受到影响,并且它正在做的工作量 "behind the curtains" 对于通过上述任何优化(尤其是依赖于键,非常快速和轻量级的优化)来说非常轻量级的东西.. .).
我有 City
-> District
,我需要在指定的 City
中找到具有指定的 name
的 District
,如果有的话。
代码:
class City(ndb.Model):
districts = ndb.KeyProperty(kind=District, repeated=True)
class District(ndb.Model):
name = ndb.StringProperty()
我该怎么做?
我相信你可能会安排你的模式来更有效地完成这项任务——例如,让城市成为该地区的祖先,使用城市名称或其他唯一的城市 ID,后跟地区名称,在地区实体键,或对模式进行反规范化,以便每个地区冗余地记录其城市以提高搜索速度。
但是,我想您可能还有其他并发症阻碍了这些优化。如果您满意,
def fetch_district_in_city(city, district_name):
query = District.query(ndb.AND(District.name == district_name,
District.key.IN(city.districts)))
return query.fetch()
可能工作得很好——它 returns 如果该城市中没有该名称的地区,则它是一个空列表,否则它可能只有一个项目(假设城市中的地区名称是唯一的)。
我认为这不太可能完全令人满意的原因(与我上面提到的优化方案相比)是 IN
方法 "explodes" 对很多 OR
和 ==
检查,如 https://cloud.google.com/appengine/docs/python/ndb/queries#neq_and_in 中所述,用于有很多地区的城市。因此,您的应用程序的性能可能会受到影响,并且它正在做的工作量 "behind the curtains" 对于通过上述任何优化(尤其是依赖于键,非常快速和轻量级的优化)来说非常轻量级的东西.. .).