如何在Neo4j中查找等效路径内的重复Joiner节点?
查找重复的Joiner节点方法
首先明确重复Joiner节点的判定规则:由同一个Thing节点通过activates关系激活,且通过targets关系指向的Thing节点集合完全相同的Joiner节点,即为重复节点。
用于查找重复节点的Cypher查询
MATCH (t:Thing)-[:activates]->(j:Joiner) MATCH (j)-[:targets]->(target:Thing) WITH t, j, collect(target.name) AS targets WITH t, targets, collect(j.name) AS joiners WHERE size(joiners) > 1 RETURN t.name AS source_thing, targets, joiners AS duplicate_joiners
查询逻辑说明
- 第一步匹配所有Thing激活Joiner的关系,以及Joiner指向目标Thing的关系。
- 按激活源Thing和Joiner节点分组,收集每个Joiner对应的所有目标Thing名称,得到该Joiner的完整目标集合。
- 再按激活源Thing和目标集合分组,把拥有相同目标集合的Joiner节点名称归为一组。
- 筛选出分组内Joiner数量大于1的结果,这些分组里的Joiner就是需要合并的重复节点。
示例数据的查询结果
运行上述查询后,会得到如下结果:
| source_thing | targets | duplicate_joiners |
|---|---|---|
| "a" | ["b"] | ["w", "x"] |
结果精准定位到了示例中需要合并的重复Joiner节点W和X。
内容的提问来源于stack exchange,提问作者Alan Buxton
相关产品推荐
相关产品推荐

