[英]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.