簡體   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