下图对通过 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)
在此图中:
最终我想合并任何重复的 Joiner 节点。在这种情况下,这将是 W 和 X。
如何找到这些重复的Joiner节点?
此查询将找到所有“重复的”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