我有这个模型:
class State(ndb.Model):
code = ndb.StringProperty(required=True)
name = ndb.StringProperty(required=True)
city_list = ndb.StructuredProperty(City, repeated=True)
country = ndb.KeyProperty(required=True)
class City(ndb.Model):
code = ndb.StringProperty(required=True)
name = ndb.StringProperty(required=True)
我实现了以下查询:
stateData = State.query( State.city_list.name == 'xyz', State.name=='Punjab' ).fetch()
我想在名称为State
的{{1}}上实现查询。但是Punjab
有许多城市,因此我按城市名Punjab
进行了过滤。
我只期望xyz
城市,但我得到了所有城市。
我如何才能只得到xyz
城市?
答案 0 :(得分:3)
您要查询State
种,因此结果将是具有{em> complete State
属性的city_list
个实体-您不能仅获得一个city_list
的子集。因此,您所期望的就是如此。
您可能会进行投影查询,在这种情况下,您将获得State
个实体的列表,每个实体在city_list
中只有一个城市,请参见Projections and multiple-valued properties。注意limitations。
或者您可以重新设计模型,也许可以使用单独的City
实体直接查询(而不是State
实体内部的结构化属性)。
答案 1 :(得分:0)
您应该先过滤一下,然后再提取。以下语法基于您使用Key属性
的旧版ndbclass State(ndb.Model):
code = ndb.StringProperty(required=True)
name = ndb.StringProperty(required=True)
city_list = ndb.KeyProperty(kind=City, repeated=True)
country = ndb.KeyProperty(required=True)
stateq = State.query( State.name=='Punjab' )
city=stateq.filter(State.City==citykey)
result=city.fetch()
我没有尝试过,但它也可能适用于结构化财产。