计算在整个图上执行的2个节点之间的双向边

时间:2019-03-25 09:01:04

标签: neo4j

我有一个加权图,它在某些节点之间具有双向关系。我想找到具有双向关系并基于权重的节点(编号较高的边将保留,我要删除的另一条边)以删除编号较低的边。

START n1=node(*), n2=node(*)
MATCH (n1)-[r:HAS_CHILD]-(n2) where (n1)-[r]->(n2)and (n1)<-[r]-(n2)
RETURN n1,r,n2 limit 10;

此查询显示的是与自身有关系的节点,我希望它们之间具有双向关系,然后删除边缘上显示的数字较小的边缘。

基于边缘的数量,我期望节点之间没有双向关系。如果我有(n)-[r {weight:2}]->(m)和(n)<-[r {weight:4}]-(m),那么剩下的边就是权重为4的边。

1 个答案:

答案 0 :(得分:0)

在Neo4j中,关系不是双向的,因此在这种情况下存在两种不同的关系。

但是您正在尝试匹配指向n1和n2的WHERE子句中的单个关系,只有在n1和n2是相同节点的情况下才有可能,这就是为什么它显示与自身具有关系的节点。

>

尝试一下:

  

将n1到n2的关系引用为r1,并将n2到n1的关系引用为r2   并进行比较

MATCH (n1)-[r1:HAS_CHILD]->(n2)-[r2:HAS_CHILD]->(n1) 
RETURN n1,r1,r2,n2 limit 10;

希望这对您有所帮助。

编辑:

在删除之前比较关系权重。

MATCH (n1)-[r1:HAS_CHILD]->(n2)-[r2:HAS_CHILD]->(n1) 
WHERE r1.weight <= r2.weight
DELETE r1;
相关问题