改变Neo4j Cypher查询以包括未连接到图形的节点?

时间:2017-05-21 01:14:22

标签: neo4j cypher

我使用下面的代码从Neo4j返回所有节点和边(3级深度),并将响应格式化为GraphJSON。然后我使用一些D3代码在我的前端可视化图形。

这适用于至少具有一个关系或边缘的节点。但是,我还有一些节点没有连接到任何其他节点。我还希望在查询的响应中包含这些节点。

我是否可以修改下面的代码以获取未通过与图形的关系连接的浮动节点?

OPTIONAL MATCH path = (x:entity)-[*..3 {current:true}]->(:entity)

UNWIND nodes(path) as node
UNWIND rels(path) as rel

WITH collect(distinct node) as nodes,
     collect(distinct rel) as rels
WITH apoc.coll.toSet( [n in nodes WHERE n is not null | { id: id(n),label: labels(n),type:"",metadata: properties(n)  } ]) as nodes, 

apoc.coll.toSet([r in rels WHERE r is not null  | { id: id(r),source: id(startNode(r)),relation: type(r),target: id(endNode(r)), directed: "true"  } ]) as rels

RETURN { graph: { type:"",label: "",directed: "true",nodes: nodes,edges: rels, metadata:{ countNodes: size(nodes),countEdges: size(rels) } } } as graph;

非常感谢,

1 个答案:

答案 0 :(得分:1)

您可以使用+运算符将集合添加到一起,因此在您收集nodesrels之后,将MATCH添加到要包含的浮点节点,收集它们,将该集合添加到您的nodes集合中,然后完成查询。