2015-06-09 15 views
0

我有一个问题。我正在尝试解决一个密码查询。我有两个节点和相关的两个关系。像,如何在neo4j中统计2个关系

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的朋友一起拥有同样的东西。 在此先感谢。

+0

在这种情况下,您可能会发现以下blogpost有趣:http://graphaware.com/neo4j/2013/10/11/neo4j-bidirectional-relationships.html –

回答

3

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

然后你可以使用暗号询问没有方向

MATCH (n)-[r:FRIEND]-(m) RETURN n, m, r 
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]这将是相同的。