2016-01-19 23 views
0

我有以下图形结构:如何找到嵌套集包含值“x”的边?

CREATE CLASS Role EXTENDS V; 
CREATE CLASS Resource EXTENDS V; 
CREATE CLASS is_allowed EXTENDS E; 
CREATE PROPERTY is_allowed.actions EMBEDDEDSET STRING; 

CREATE EDGE is_allowed FROM #19:1 TO #22:33 CONTENT {'actions':['read', 'write', 'execute']} 

我现在想找到具有特定权限的对象,所以,我想:

SELECT inE('is_allowed')['read' in actions)] FROM Resource WHERE name = 'Some Resource' 
SELECT expand(inE('is_allowed')[actions contains 'read']) FROM Resource 
SELECT expand(inE('is_allowed')['read'=actions]) FROM Resource 

但没有得到结果,要仔细的检查我做:

SELECT expand(inE('is_allowed')) FROM Resource 

我得到两个结果显示入站边缘。

我看了这个SO回答(OrientDB Query by edge property),可以很容易地过滤边缘,当它是一个单一的字符串属性,但不确定是否有可能或如何过滤使用嵌入式集。

回答

3

你可以尝试一个嵌套的SELECT语句:

select from (
    SELECT expand(inE('is_allowed')) FROM Resource 
) where actions contains "write" 

编辑: 如果您需要的角色或资源,可以扩大和缩小。

的角色:

select expand(out) from (
    SELECT expand(inE('is_allowed')) FROM Resource 
) where actions contains "read" 

和资源:

select expand(in) from (
    SELECT expand(inE('is_allowed')) FROM Resource 
) where actions contains "read" 

BYE

+0

叶氏,谢谢,这是我终于实现了,可惜我不能做到这一点,而不膨胀:( – whisperstream