使用通配符创建关系,但只能在同一节点类型中创建关系



假设我有两个节点类型:Node1Node2。它们都有相同的属性{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)

在这个查询中,我们获取所有节点并检查它们的标签是否相同,并相应地创建关系。

相关内容

  • 没有找到相关文章

最新更新