如何在neo4j中将2个关系统计为一个

时间:2015-06-09 11:44:25

标签: neo4j cypher

我有一个问题。我正在尝试解决一个密码查询。我有两个节点和相关的两个关系。等,

relationships between two nodes

有时可以。我使用了查询

(A)-[:Friend]-(B) with A count (B) return B as newfriend。 如果我使用

(A)-[:Friend]->(B) with A count (B) return B as newfriend OR

(A)<-[:Friend]-(B) with A count (B) return B as newfriend有时它什么都不返回。有没有可能我可以把这种关系算作一个,因为如果一个朋友与B或B的朋友有A同样的事情。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

我认为你应该只有一种友谊关系,因为一种暗示另一种关系。对于Neo4j而言,在遍历期间关系的方向并不重要。

然后你可以使用没有方向的密码查询

MATCH (n)-[r:FRIEND]-(m) RETURN n, m, r

答案 1 :(得分:1)

通常你不会为此创建两个关系,因为节点之间的连接是对称的。

话虽如此,你有两种不同的关系,所以你只能按开始和结束节点对它们进行分组。

MATCH (n)-[r:FRIEND]-(m) 
RETURN case when id(n) < (m) then [n,m] else [m,n] end as pair, count(*);

这个case when id(n) < (m) then [n,m] else [m,n] end as pair创建了一对[n,m],其中左边的id总是低于右边,因此对于[n,m]和[m,n],它们将是相同的。< / p>