我正在尝试创建用于在节点之间创建关系的通用查询。 问题是当一个匹配失败时,另一个匹配将被忽略。以下查询应创建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)
答案 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
,则会运行查询;否则它会失败,这是好的,因为无论如何都不应该创建任何关系。