从 Neo4j 中的双向关系查询单一关系

Querying single relationship from a bidirectional relationship in Neo4j

是否可以从双向关系中只显示一个方向关系?

(n)-[:EMAIL_LINK]->(m)

(n)<-[:EMAIL_LINK]-(m)

如果所讨论的关系类型没有方向语义,最佳做法是让它们在图中只出现一次并在查询时省略方向,即 (a)-[:EMAIL_LINK]-(b) 而不是 (a)-[:EMAIL_LINK]->(b)

要消除不同方向的重复关系,请使用:

MATCH (a)-[r1:EMAIL_LINK]->(b)<-[r2:EMAIL_LINK]-(a)
WHERE ID(a)<ID(b)
DELETE r2

如果您的图表很大,您需要通过多次添加 LIMIT 和 运行 查询来处理合理的事务大小,直到所有的都被处理。

注意:WHERE ID(a)<ID(b) 是必要的。否则 ab 可能会在以后的迭代中改变角色。因此 r1r2 也会改变角色,并且都被删除。