我正在尝试创建一个用于创建节点之间关系的通用查询。问题是当一个匹配失败时,另一个会被忽略。以下查询应创建3个关系。但它不仅仅是2。非常感谢你的帮助。我是Cypher的乞丐Vince
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)
您可以在所有后续的上使用OPTIONAL MATCH
而不是MATCH
。如果这些不存在,您的查询就不会失败。
更通用的查询
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)
这将只匹配给定数组中具有有效uid
的b
节点,并为它们中的每一个创建一个关系,因此,如果列表中有无效的uid
,这不会失败(它们将被忽略)。
如果至少存在一个有效的b
,则将运行该查询;否则它将失败,这是可以的,因为无论如何都不应该创建任何关系。