我只想显示两个节点之间的双向关系

时间:2019-04-09 12:44:59

标签: neo4j cypher

我有一个加权图,某些节点具有相同权重的双向关系。我只想以表格形式显示这些节点。

MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1) 
RETURN  n1.prefered_name ,r1.weight,r2.weight, n2.prefered_name;

Result of this query, but I want to show me only one row

这段代码为我提供了我所需要的,但加倍了。

如果我在两个具有相同权重的节点(指向不同方向)之间有2个关系,我只想向我展示一次特定行。 这可以实现吗?还是因为是双向关系,所以必须告诉我两次?

2 个答案:

答案 0 :(得分:2)

由于两种模式都匹配,因此您只需要添加一个WHERE子句以限制输出以仅在一个方向上返回匹配。

MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1)
WHERE id(n1) > id(n2)
RETURN  n1.prefered_name ,r1.weight,r2.weight, n2.prefered_name;

答案 1 :(得分:2)

此查询与@DaveBennett的查询类似,但仅在两个关系的权重相同时才过滤出一行:

MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1)
WHERE r1.weight <> r2.weight OR ID(n1) > ID(n2)
RETURN n1.prefered_name, r1.weight, r2.weight, n2.prefered_name;

顺便说一句,n1n2成为彼此的“后裔”是不直观的。如果有意这样做,则可能需要将关系类型的名称更改为不太混乱的名称。