繁体   English   中英

如何在neo4j密码中仅与一个节点(名称相似)建立关系?

[英]How to create relationship to just one node (with a similar name) in neo4j cypher?

我想设计一个关于机场的数据库。 每个机场至少有五个航站楼(分别为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?

提前致谢

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})

为什么要有五个带有“ A”名称的端子? 解决方案可以是:

MATCH (a:Airport{name:"Schiphol"})
MATCH (b:Terminal{name:"A"}) 
WITH a, COLLECT (b) as terminals
WITH a, HEAD(terminals) as terminal 
CREATE (a)-[r: INCLUDES]->(terminal)

(未尝试)但这是任意的...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM