假设我有 2 种节点类型:
Node1
和 Node2
。
他们都有相同的属性{order:Integer}
现在我想创建具有
order:2
的节点与具有"AFTER"
的节点具有order:1
关系的关系但是,我只想在相同的节点类型中创建关系。
也就是说,Node1{order:2}
应该与 AFTER
有 Node1{order:1}
关系,但与 Node2{order:1}
没有关系
当我使用通配符时,它会匹配并创建我不想要的跨节点类型的关系。
MATCH (s:%{order:2}), (f:%{order:1})
CREATE (s)-[o:AFTER]->(f)
如何在不显式硬编码每个边创建的情况下实现我想要的? 这是我想避免的:
MATCH (s1:Node1{order:2}), (f1:Node1{order:1}), (s2:Node2{order:2}), (f2:Node2{order:1})
CREATE (s1)-[o:AFTER]->(f1), (s2)-[o:AFTER]->(f2)
基本上我想弄清楚是否有一种方法可以使用智能通配符(我使用
SAMETYPE
作为占位符),匹配相同。像这样:
MATCH (s:%SAMETYPE{order:2}), (f:%SAMETYPE{order:1})
CREATE (s)-[o:AFTER]->(f)
如果您数据库中的每个节点只有一个标签,那么这对您有用:
MATCH (s{order:2}), (f{order:1})
WHERE labels(s)[0] = labels(f)[0]
CREATE (s)-[o:AFTER]->(f)
在此查询中,我们获取所有节点并检查它们的标签是否相同,并相应地创建关系。