创建与通配符的关系,但仅限于相同的节点类型

问题描述 投票:0回答:1

假设我有 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)
neo4j cypher
1个回答
0
投票

如果您数据库中的每个节点只有一个标签,那么这对您有用:

MATCH (s{order:2}), (f{order:1})
WHERE labels(s)[0] = labels(f)[0]
CREATE (s)-[o:AFTER]->(f)

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

© www.soinside.com 2019 - 2024. All rights reserved.