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