2017-03-01 132 views
1

我試圖通過id搜索特定的節點,然後返回距該節點1或2跳的所有節點和關係。我也試圖將結果格式化爲用於D3的JSON。感謝來自@ william-lyon以前的帖子的一些幫助,我設法讓查詢工作1跳。我現在的問題是,當我將它擴展到2跳時,當我想要只有不同的節點和關係時,我會得到重複項。我試圖使用RETURN(DISTINCT X)函數,但我無法使它工作。從cypher返回不同的節點和關係,格式爲JSON

MATCH (l0) -[r1]-> (l1) -[r2]-> (l2) 
WHERE ID(l0) = 65 
RETURN 
    [ 
      { 
       type: "node", 
       id: id(l0), 
       labels: labels(l0), 
       props: apoc.map.fromPairs([key IN keys(l0) | [key, l0[key]]]) 
      }, 
      { 
       type: "node", 
       id: id(l1), 
       labels: labels(l1), 
       props: apoc.map.fromPairs([key IN keys(l1) | [key, l1[key]]]) 
      }, 
      { 
       type: "node", 
       id: id(l2), 
       labels: labels(l2), 
       props: apoc.map.fromPairs([key IN keys(l2) | [key, l2[key]]]) 
      } 
    ] as nodes, 
    [ 
      { 
       startNodeId: ID(startNode(r1)), 
       endNodeId: ID(endNode(r1)), 
       relType: type(r1) 
      }, 
      { 
       startNodeId: ID(startNode(r2)), 
       endNodeId: ID(endNode(r2)), 
       relType: type(r2) 
      } 
] as relationships 

非常感謝

回答

0

是否是這樣的滿足您的需求?它只是扁平你正在返回的集合,並重組每個不同的實體。

MATCH (l0:Node {name: 'N1'}) -[r1]-> (l1:Node) -[r2]-> (l2:Node) 
WITH [ 
     { 
      type: "node", 
      id: id(l0), 
      labels: labels(l0), 
      props: apoc.map.fromPairs([key IN keys(l0) | [key, l0[key]]]) 
     }, 
     { 
      type: "node", 
      id: id(l1), 
      labels: labels(l1), 
      props: apoc.map.fromPairs([key IN keys(l1) | [key, l1[key]]]) 
     }, 
     { 
      type: "node", 
      id: id(l2), 
      labels: labels(l2), 
      props: apoc.map.fromPairs([key IN keys(l2) | [key, l2[key]]]) 
     } 
] as nodes, 
[ 
     { 
      startNodeId: ID(startNode(r1)), 
      endNodeId: ID(endNode(r1)), 
      relType: type(r1) 
     }, 
     { 
      startNodeId: ID(startNode(r2)), 
      endNodeId: ID(endNode(r2)), 
      relType: type(r2) 
     } 
] as relationships 
UNWIND nodes as node 
UNWIND relationships as relationship 
RETURN collect(distinct node) as nodes, collect(distinct relationship) as relationships 
+0

這很好用 - 非常感謝!我已經放棄了試圖讓這個工作,我開始嘗試使用apoc.convert.toTree「程序,但是你的解決方案是完美的,我感謝你的幫助。 – n4nite

相關問題