从 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)
是必要的。否则 a
和 b
可能会在以后的迭代中改变角色。因此 r1
和 r2
也会改变角色,并且都被删除。
是否可以从双向关系中只显示一个方向关系?
(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)
是必要的。否则 a
和 b
可能会在以后的迭代中改变角色。因此 r1
和 r2
也会改变角色,并且都被删除。