如何编写Cypher查询输出适配D3图谱的节点与链接格式数据
适配D3 Graph格式的Neo4j Cypher查询方案
你原来使用的全节点导出逻辑没有做属性映射和关联关系聚合,直接调整查询语句即可输出符合要求的结构,完整可运行查询如下:
// 匹配所有电影、参演演员及二者的关联关系 MATCH (m:Movie)-[r:ACTED_IN]-(p:Person) // 聚合节点、关联关系,统一映射为D3适配的格式 WITH // 合并电影节点、演员节点为统一的nodes数组 COLLECT(DISTINCT { id: m.name, labels: labels(m), revenue: m.revenue, year: m.year, genres: m.genres, director: m.director, rating: m.rating, runtime: m.runtime }) + COLLECT(DISTINCT { id: p.name, labels: labels(p) }) AS nodes, // 生成links数组,source、target直接用名称字段取值 COLLECT(DISTINCT { source: m.name, target: p.name, relation: type(r) }) AS links // 直接返回D3可直接使用的结构 RETURN {nodes: nodes, links: links} AS d3_graph_data // 如需直接导出为本地JSON文件,替换上方RETURN语句为以下内容即可 // CALL apoc.export.json.data( // {nodes: nodes, links: links}, // "file:///d3_graph_data.json", // {writeMode: "Overwrite"} // )
适配说明
- 节点格式完全符合要求:所有节点统一用
name属性作为id,电影节点额外保留revenue、year等指定属性,演员节点无冗余字段 - 关联关系直接使用电影名、演员名作为source和target值,适配D3力导向图的默认字段规则
- 适配Neo4j 5.x最新的参数校验规则,无隐式参数引用,无需额外调整配置即可运行
注意事项
- 如果你的电影节点的名称字段为
title而非name,对应替换查询中所有m.name为m.title即可 - 需要导出文件前请确认
neo4j.conf中已开启配置项apoc.export.file.enabled=true,且导出路径属于Neo4j允许的文件操作目录 - 如果需要包含无参演关系的孤立节点,可额外增加全节点匹配逻辑过滤所需标签的节点加入nodes数组即可
内容的提问来源于stack exchange,提问作者JustThatGuy93
相关产品推荐
相关产品推荐

