如何使用Neo4j Cypher匹配路径,如果其中一部分不存在,则返回其余部分。

5
我有一个Neo4j图,看起来像这样:(person:Person)-[:acted_in]->(movie:Movie)-[:played_in]->(country:Country)
我想使用以下查询匹配整个路径:
MATCH path = ((person:Person)-[:acted_in]->(movie:Movie)-[:played_in]->(country:Country)) RETURN NODES(path), RELATIONSHIPS(path)

但是,这里有个棘手的部分,我也想添加一个条件:如果[:played_in]不存在,只返回部分路径:(person:Person)-[:acted_in]->(movie:Movie)。
谢谢。

2
在您的Cypher中,所有这些都是变量,没有标签或关系类型,并且不清楚这些变量中哪些是先前绑定到图元素的,哪些是新的并且要与此匹配的图元素相匹配。很容易将最多2个关系与变长路径匹配:MATCH path = (start)-[*..2]->(end),但从您的问题中不清楚这是否是您所需的,或者您是否正在使用特定的标签和关系类型。您能澄清一下您的问题吗? - InverseFalcon
添加了一些标签,希望能使问题更清晰明了。 - Yuval
1个回答

5
也许以下查询语句对您有用:

或许以下查询语句能够为您提供帮助:

MATCH path = (a)-[:b]->(c) 
OPTIONAL MATCH path2 =(c)-[:d]->(e) 
RETURN 
   NODES(path)+COALESCE (NODES(path2),[]), 
   RELATIONSHIPS(path)+COALESCE (RELATIONSHIPS(path2),[])

运行得很好!之前不知道 COALESCE。 - Yuval
很酷!但不要忘记考虑@inverseFalcon的评论和变量长度路径。 - SylvainRoussy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接