2015-10-06 120 views
0

我有一种client是由实体与含有Key是否有可能在包含键

列表属性psets的列表(value)属性运行'的祖先过滤器/查询使用JSON API psets这将表示为:

psets = { listValue: [ {keyValue: { path: [...]} },{keyValue: { path: [...]} },... ]} 

的键值来制成的path = [{ kind: 'project', name: 'projectn' }]

我试图运行“客户”上的“祖先”查询使用

SELECT * from client where psets HAS ANCESTOR KEY(project, 'project1') 

该查询返回了一个错误:unsupported property

什么是不支持?

如何在键列表上运行'HAS ANCESTOR'过滤器?

根据该DataStore Documentation(运营商和比较)

A condition can also test whether one entity has another entity as an ancestor, using the HAS ANCESTOR or HAS DESCENDANT operators. These operators test ancestor relationships between keys. They can operate on __key__, but they can also operate on a key-valued property. For HAS ANCESTOR, the right operand cannot be a property

(重点煤矿)

+1

这看起来像一个文档错误。我正在努力解决这个问题,希望能提供更好的错误信息。 –

回答

1

数据存储仅支持实体按键的HAS ANCESTOR运营商(即特殊__key__属性),而不是请注意,定期的关键值。

可能的解决方法是将每个祖先明确包含在实体中作为属性。

因此,举例来说,如果你的psets属性包含一个关键project:project1/foo:2/bar:3,你能保持在包含project:project1project:project1/foo:2,并project:project1/foo:2/bar:3单独psets_ancestors列表属性。然后,你可以做平等查询的psets_ancestors属性:

SELECT * FROM client WHERE psets_ancestors = KEY(project, 'project1')

(这是以额外的索引条目的成本和需要维护单独的列表属性。)

相关问题