代码之家  ›  专栏  ›  技术社区  ›  whisperstream

如何找到嵌入集包含值“x”的边?

  •  0
  • whisperstream  · 技术社区  · 9 年前

    我有以下图表结构:

    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 )当它是单个字符串预处理时,可以很容易地过滤边缘,但不确定它是否可能,或者在使用嵌入集时如何过滤。

    1 回复  |  直到 5 年前
        1
  •  3
  •   peak    9 年前

    您可以尝试嵌套的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"
    

    缓冲酵母抽取物