如何根据Google Cloud / Python中的关键属性的属性进行排序?

时间:2017-07-29 23:00:55

标签: python python-2.7 google-cloud-datastore app-engine-ndb

使用以下ndb模型类:

class Product(ndb.Model):
    name = ndb.StringProperty()
    barcode = ndb.StringProperty()

class Donation(ndb.Model):
    user= ndb.UserProperty()
    product = ndb.KeyProperty(kind=Product)

使用如下查询时:

donations = Donation.query().order(Donation.product).fetch(1000)

如何按donationsProduct name对结果barcode进行排序?

1 个答案:

答案 0 :(得分:1)

您不能进行此类查询,至少不能使用数据存储区。排序顺序只能是相应实体模型的属性之一。

每个查询都需要一个或多个相应的数据存储区indexes。对于有序查询,您需要composite indexes,在index.yaml文件中定义。每个此类索引在其定义中只有一个kind,您无法在您的案例中混合多个实体类型(DonationProduct)。

如果您需要此类查询,您可以复制必要的信息并在更新product属性时填写。此外,如果/当相应的Product属性发生更改时,您可能需要更新引用它的所有Donation个实体。

一个可能接受的中间地点是使用实际的product属性值(密钥本身)来订购查询 - 至少您将所有捐赠链接到同一产品实体组合在一起