我能够从neo4j数据中用d3绘制图形,但我正在努力绘制一棵树。我见过的例子使用了一个json文件,其中每个节点都包含一个自己子节点的数组。虽然这看起来很方便,但至少对我而言,与neo4j接口并不容易。实际上,neo4j不允许从(n) - (m)图中返回{nodes:collect(distinct {name:n.name,children:collect(distinct {name:m.name})})}。然而,它会让一个人从路径返回节点和边的集合。
我的问题是,是否可以在节点和边缘绘制d3中的树而不为数据结构中的每个节点生成子节点?
非常感谢提前 皮尔
答案 0 :(得分:1)
从neo4j检索节点和关系的Cypher查询将是:
exp_y
因此,javascript和d3代码: - 从json中提取节点和关系
MATCH p=() <-[:REPORTS8TO]- ()
UNWIND nodes(p) AS n UNWIND rels(p) AS r
WITH n, r ORDER BY n.Name
RETURN {nodes: COLLECT(DISTINCT n), links: COLLECT(DISTINCT {source: id(endNode(r)), target: id(startNode(r))})}
画树
var obj = JSON.parse(xmlhttp.responseText);
var json = obj.data[0][0];
var nodeMap = {};
json.nodes.forEach(function(x) {
nodeMap[x.id] = x;
nodeMap[x.id].children = [];
});
var links = json.links.map(function(x) {
nodeMap[x.source].children.push(nodeMap[x.target]);
return { source: nodeMap[x.source], target: nodeMap[x.target] };
});
答案 1 :(得分:0)
对于返回经理及其各自子女的密码查询,这是怎么回事。
match (manager)<-[:REPORTS_TO]-(direct_reports)
return id(manager), collect(id(direct_reports))