Neo4j 和 Cypher:逆向只有一个箭头

Neo4j and Cypher: Reversing Only One Arrow

假设我的 Neo4j 图中有三个节点,具有如下定向关系:(a)<--(b)-->(c)。此外,假设 (b) 没有 属性 visit_type_name,而 (a)(c) 都有。现在我想做的是反转 这些箭头中的一个 。目前,哪一个并不重要,尽管能够指定条件,涉及属性,在哪一个上反转会很好。我尝试了以下方法:

MATCH(x)-[r]->(y)
WHERE NOT EXISTS(()-->(x))
    AND NOT EXISTS(x.visit_type_name)
DELETE r
MERGE(y)-->(x)

我的想法是,这段代码反转后,比如说,箭头(a)<--(b)指向(a)-->(b),那么(b)就不再是parent-less,而MATCH 不会继续对 (b)-->(c) link 做同样的事情。不幸的是,Cypher 确实继续并反转了两个箭头,这不是我想要的。于是我尝试了这个,认为我需要更改 Cypher 匹配的粒度:

MATCH(y)
WITH y
MATCH(x)-[r]->(y)
WHERE NOT EXISTS(()-->(x))
    AND NOT EXISTS(x.visit_type_name)
DELETE r
MERGE(y)-->(x)

不幸的是,这和以前一样。

How can I reverse only one arrow in this situation?

有没有办法在继续之前完成第一个箭头逆转交易?

非常感谢您的宝贵时间!

我想我有办法做到这一点。每个节点都有一个唯一的数字 id,我可以按如下方式利用它:

MATCH(x)-->(y)
WHERE NOT EXISTS(()-->(x))
    AND NOT EXISTS(x.visit_type_name)
WITH MIN(y.id) AS min_y_id, x
MATCH(x)-[r]->(min_y)
WHERE min_y.id = min_y_id
DELETE r
MERGE(min_y)-->(x)

这实质上是挑选出最小值id,并且只反转相应节点的箭头。