与祖先的Google数据存储区订单

时间:2018-06-25 18:58:56

标签: python google-cloud-platform google-cloud-datastore datastore

语言:Python。

我正在使用数据存储区python lib,一切正常。使用数据存储区查询对查询结果进行排序时,我可以添加query.order = ['name'];对结果进行排序。但是当查询祖先的表时,例如:

ancestor = client.key('user', name, namespace = NAMESPACE)
query = client.query(kind='project', ancestor=ancestor, namespace = NAMESPACE)

然后我设置了订单:query.order = ['name'];,它不起作用。我想对种类project进行排序,其祖先是种类user。 错误消息是:“ 400未找到匹配的索引。推荐的索引是:↵-种类:项目↵祖先:是↵属性:↵-名称:名称”,这是一个Yaml示例。但是我在这里不使用yaml。我认为,尽管有祖先,但必须有一种对结果进行排序的方法。

1 个答案:

答案 0 :(得分:0)

所有数据存储区查询均基于索引。来自Indexes

  

每个Google Cloud Datastore query都使用一个计算其结果   或更多个包含按以下顺序指定的实体键的索引   索引的属性,以及实体的祖先。的   索引被更新以反映应用程序所做的任何更改   它的实体,以便可以使用所有查询的正确结果   无需进一步的计算。

您得到的错误来自数据存储区,这表明您的特定查询所需的索引在数据存储区中丢失。这与执行祖先查询和/或在应用程序代码中使用yaml无关。

yaml参考仅来自将索引部署到数据存储区的方式(这是您要执行查询才能执行的操作),请参阅Deploying or deleting indexes

因此,您需要创建一个index.yaml文件,至少包含错误消息中指示的索引规范(以及其他查询可能需要的其他任何索引,如果有的话),将其部署到数据存储区,等待在Indexes页面上进入Serving状态的索引(可能需要一段时间),之后您的查询应该工作。