如何在 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 到机场?
提前致谢
为什么有五个名称为 '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)
(没试过)
但它是任意的...
MERGE 将成为这里的解决方案,创建包括航站楼在内的机场模式,但不会提前创建 :Terminal 节点。
当您对模式使用 MERGE 并且其中一个节点已绑定(机场节点)而另一个未绑定(终端)时,如果需要创建模式,则未绑定节点将是与节点之间的关系一起创建。这就是您为每个机场创建航站楼的方式。
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、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 到机场?
提前致谢
为什么有五个名称为 '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)
(没试过) 但它是任意的...
MERGE 将成为这里的解决方案,创建包括航站楼在内的机场模式,但不会提前创建 :Terminal 节点。
当您对模式使用 MERGE 并且其中一个节点已绑定(机场节点)而另一个未绑定(终端)时,如果需要创建模式,则未绑定节点将是与节点之间的关系一起创建。这就是您为每个机场创建航站楼的方式。
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})