OrientDB遍历使用node-property的交集条件

时间:2015-10-16 09:59:58

标签: compare traversal intersection orientdb subgraph

请道歉,我是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上处理它。我认为可以使用 TRAVERSE intersect()函数来完成,但我不知道如何比较两个节点的属性。

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

我使用字段标签作为字符串的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)