我有一个问题。我正在尝试解决一个密码查询。我有两个节点和相关的两个关系。等,
有时可以。我使用了查询
(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同样的事情。
提前谢谢。
答案 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>