请道歉,我是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查询?
提前致谢。
答案 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)