假设我有两个节点类型:Node1
和Node2
。它们都有相同的属性{order:Integer}
现在我想创建具有order:2
的节点与具有order:1
的节点具有"AFTER"
关系的关系,但是,我只想在相同的节点类型中创建关系。也就是说,Node1{order:2}
应该与Node1{order:1}
有AFTER
关系,而与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)
在这个查询中,我们获取所有节点并检查它们的标签是否相同,并相应地创建关系。