繁体   English   中英

通过重复的StructuredProperty的特定实例的属性对NDB进行排序

[英]NDB ordering by property of specific instance of repeated StructuredProperty

在用于汽车历史记录的应用程序中,我必须创建不同的图表,其中某些模型可能以“最快的汽车”,“最佳的汽车”等形式出现在一个或多个不同的图表中。然后必须在图表中对其进行排序。 我已经使用StructuredProperty创建标签名称/订单位置对。

class CarTag(ndb.Model):
    name = ndb.StringProperty()
    position = ndb.IntegerProperty()

class Car(ndb.Model):
    model_name = ndb.StringProperty()
    trim = ndb.StringProperty()
    year = ndb.IntegerProperty()
    tags = ndb.StructuredProperty(CarTag, repeated=True)

结构化属性上的过滤器工作正常。

cars = Car.query(Car.tags.name=="fastest car")

但是要获得排序的图表,我需要通过相同的StructuredProperty的position属性(即“最快的汽车”)对它们进行排序。 如我在此问题中所读,order(Car.tags.position)将仅按列表的第一个元素进行排序。

cars = Car.query(Car.tags.name==name).order(Car.tags.position)

是否可以通过特定StructuredProperty的属性进行订购?

这并不是说您不能按StructuredProperty内部的属性排序,而是您的StructuredProperty重复= True ...使其成为列表属性..并且您不能可靠地对列表属性进行排序:

https://cloud.google.com/appengine/docs/python/datastore/queries#properties_with_multiple_values_can_behave_in_surprising_ways

具有多个值的属性可以以令人惊讶的方式表现

由于对它们进行索引的方式,具有相同属性的多个值的实体有时可以与查询过滤器进行交互,并以意外和令人惊讶的方式对顺序进行排序。

.....

如果查询结果以升序排序,则使用属性的最小值进行排序。 如果结果按降序排序,则将最大值用于排序。 其他值不影响排序顺序,也不影响值的数量。 这具有不同寻常的结果,即属性值1和9的实体在值4、5、6和7之前都以升序和降序排列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM