Cypher Query创建多种关系

时间:2014-11-12 14:27:55

标签: neo4j cypher relation

我正在尝试创建用于在节点之间创建关系的通用查询。 问题是当一个匹配失败时,另一个匹配将被忽略。以下查询应创建3个关系。但它不仅仅是2。 非常感谢您的帮助。我是Cypher的初学者 文斯

MATCH (a:Strata),(b) WHERE a.uid = 'strata60' AND b.uid= 'cmCharacteristic' CREATE (a)-[r:IS_CONSTITUTED_BY]->(b)

 WITH 1 as dummy 

 MATCH (a:Strata),(b) WHERE a.uid = 'strata60' AND b.uid= 'cloudCharacteristic' CREATE (a)-[r:IS_CONSTITUTED_BY]->(b) 

WITH 1 as dummy 

 MATCH (a:Strata),(b) WHERE a.uid = 'strata60' AND b.uid= '' CREATE (a)-[r:IS_CONSTITUTED_BY]->(b) 

WITH 1 as dummy 


 MATCH (a:Strata),(b) WHERE a.uid = 'strata60' AND b.uid= '' CREATE (a)-[r:IS_CONSTITUTED_BY]->(b) 

WITH 1 as dummy 

 MATCH (a:Strata),(b) WHERE a.uid = 'strata60' AND b.uid= 'mFeCharacteristic' CREATE (a)-[r:IS_CONSTITUTED_BY]->(b)

 WITH 1 as dummy 

 MATCH (a:Strata),(b) WHERE a.uid = 'strata60' AND b.uid= '' CREATE (a)-[r:IS_CONSTITUTED_BY]->(b)

2 个答案:

答案 0 :(得分:1)

您可以在后续版本中使用OPTIONAL MATCH代替MATCH。然后,如果那些不存在,您的查询就不会失败。

答案 1 :(得分:0)

更通用的查询

match (a:Strata {uid: 'strata60'}), b where b.uid in ['x', 'cmCharacteristic']
with a, collect(b) as bs
foreach (b in bs | create unique a-[:REL]->b)

这将仅匹配给定数组中有效b的{​​{1}}个节点,并为每个节点创建一个关系,因此如果无效uid s,则不会失败在列表中(它们将被忽略)。

如果至少有一个有效的uid,则会运行查询;否则它会失败,这是好的,因为无论如何都不应该创建任何关系。