【问题标题】:OrientDB traverse using intersection condition for node-propertyOrientDB 使用节点属性的交集条件遍历
【发布时间】:2015-10-16 09:59:57
【问题描述】:

请道歉,我是 stackoverflow 的新手,对 OrientDB 完全陌生。我在 OrientDB 中有以下简单的测试结构: different connected nodes, which have a list of tags as property

我只想显示图形的一部分(带有边缘的节点),它们在标签处有一个交集。这应该是这个例子,突出显示的红色节点和平滑的红色一次,边缘 PRAESENTIERT_BEI

在 Neo4j 中,这很容易。您只需查找起始节点,遍历所有连接并将属性与过滤器进行比较,如下面的代码示例:

MATCH (n:ConferenceSerie)
MATCH p = n-[*]-m WHERE FILTER(x IN n.flag WHERE x IN m.flag)
RETURN p

但我不知道如何在 OrientDB 上处理它。我以为可以用 TRAVERSEintersect() 函数来完成,但我不知道如何比较两个节点的属性。

是否有机会创建一个显示子图的 SQL 查询?

提前致谢。

【问题讨论】:

    标签: compare traversal intersection orientdb subgraph


    【解决方案1】:

    我使用字段标签作为字符串的EmdeddedList

    create class A extends V
    create property A.tags EmbeddedList String
    create class B extends V
    create property B.tags EmbeddedList String
    create class C extends V
    create property C.tags EmbeddedList String
    create class D extends V
    create property D.tags EmbeddedList String
    
    create class E1 extends E
    create class E2 extends E
    create class E3 extends E
    
    insert into A(tags) values(["http"])                //#12:0
    insert into B(tags) values(["www","cs","at"])       //#13:0
    insert into C(tags) values(["www","papers","com"])  //#14:0
    insert into D(tags) values(["https"])               //#15:0
    
    create edge E1 from 12:0 to 13:0
    create edge E2 from 14:0 to 13:0
    create edge E3 from 14:0 to 15:0
    

    试试下面的查询

    select expand(list) from (select $d as list from e 
    let $a=(select in.tags as tags from $parent.$current unwind tags), 
    $b=(select out.tags as tags from $parent.$current unwind tags ), 
    $c=intersect($a.tags,$b.tags),
    $d=unionAll(@rid,out.@rid,in.@rid)
    where $c.asList().size()>0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多