在neo4j中查找等效路径中的重复节点

问题描述 投票:0回答:1

下图对通过 Joiner 节点链接的事物进行建模,其中每个事物激活一个或多个连接器,并且每个连接器针对一个或多个其他事物。

CREATE (a: Thing {name:"a"}), (b: Thing {name:"b"}), (c: Thing {name:"c"}),
    (d: Thing {name:"d"}), (e: Thing {name:"e"}),
    (f: Thing {name:"f"}), (g: Thing {name:"g"}),
    (w: Joiner {name:"w"}), (x: Joiner {name:"x"}),
    (y: Joiner {name:"y"}), (z: Joiner {name:"z"}),
    (a)-[:activates]->(w)-[:targets]->(b),
    (a)-[:activates]->(x)-[:targets]->(b),
    (c)-[:activates]->(y)-[:targets]->(d),
    (e)-[:activates]->(z)-[:targets]->(f),
    (z)-[:targets]->(g)

在此图中:

  • 事物 A 有两个连接节点,都以事物 B 为目标
  • 事物 C 有一个以事物 D 为目标的连接节点
  • 事物 E 有一个以事物 F 和事物 G 为目标的连接节点

最终我想合并任何重复的 Joiner 节点。在这种情况下,这将是 W 和 X。

如何找到这些重复的Joiner节点?

neo4j cypher
1个回答
0
投票

此查询将找到所有“重复的”Joiner 节点并删除它们及其所有关系:

MATCH (a:Thing)-[:activates]->(w:Joiner)-[:targets]->(b:Thing)
WITH a, b, COLLECT(w) AS ws
WHERE SIZE(ws) > 1
UNWIND TAIL(ws) as unwanted
DETACH DELETE unwanted
© www.soinside.com 2019 - 2024. All rights reserved.