首页 > 解决方案 > 如何在 neo4j 密码中仅与一个节点(具有相似名称)创建关系?

问题描述

我想设计一个关于机场的数据库。每个机场至少有五个航站楼(分别命名为 A、B、C、D 和 E)。所以我想让史基浦机场包括 A、B、C、D、E。但是我创建了五个名为“A”的终端,因此如果我运行此代码:

MATCH (a:Airport{name:"Schiphol"}),(b:Terminal{name:"A"}) CREATE (a)-[r: INCLUDES]->(b)

它将每个航站楼 A 连接到史基浦机场。我怎样才能避免这种情况,只分配一组 A 、 B 、 C 、 D 和 E 到机场?

提前致谢

标签: databasegraphneo4jcypherrelation

解决方案


MERGE 将成为这里的解决方案,创建包括终端在内的机场模式,但不提前创建 :Terminal 节点。

当您将 MERGE 用于模式并且其中一个节点已绑定(:Airport 节点)而另一个未绑定(:Terminal)时,如果需要创建模式,则将创建未绑定节点以及关系节点之间。这就是您为每个机场创建航站楼的方式。

MATCH (a:Airport{name:"Schiphol"})
MERGE (a)-[:INCLUDES]->(termA:Terminal{name:"A"}) 

如果您想在每个机场一次创建所有航站楼:

MATCH (a:Airport{name:"Schiphol"})
UNWIND ['A','B','C','D','E'] as term
MERGE (a)-[:INCLUDES]->(terminal:Terminal{name:term})

推荐阅读