2016-05-19 16 views
0

我有每個節點都與其子節點具有父關係的圖(如附圖所示)和一個名稱屬性。 enter image description here我想從嵌套JSON對象的像這樣顯示該曲線圖中:在neo4j中以嵌套json形式表示無限深度節點

{name: A, 
children: [{name: A1, 
      children: A11, A12, A13 }, 

      {name: A2, 
      children: A21, A22, A23}, 

      {name: A3, 
      children: A31, A32, A33} 
      ]} 

欲遍歷任何深度所以rlationship應該排序的(一) - [*] - >(b)中。 參考this question,我有以下查詢上來:

match(parent{name: "A"})-[*]->(child) 
with parent, child, collect(child.name) as children 
return {name: parent.name, 
    children: collect({name: child.name, 
         children: children})} 

但上面的查詢將產生以下結果:

name A 
    children [ 
    name A23 
    children [A23] 
    , 
    name A22 
    children [A22] 
    , 
    name A32 
    children [A32] 
    , 
    name A2 
    children [A2] 
    , 
    name A12 
    children [A12] 
    , 
    name A21 
    children [A21] 
    , 
    name A31 
    children [A31] 
    , 
    name A1 
    children [A1] 
    , 
    name A11 
    children [A11] 
    , 
    name A33 
    children [A33] 
    , 
    name A3 
    children [A3] 
    , 
    name A13 
    children [A13] 
    ] 

那麼,什麼可能是可能的解決方案代表了這個完整的樹如上所述的json對象的形式?

+0

你能請附上樣本輸出,如果它給一些 –

+0

完成。只是編輯了我的問題並共享了查詢的輸出! –

+0

我不知道確切的解決方案,但匹配(parent {name:「A」}) - [*] - >(child)匹配所有連接到A的節點作爲A的子節點。您不會獲得該子節點的直接父節點。 –

回答

1

我加了這樣的功能,以APOC,隨時檢查出來: https://github.com/neo4j-contrib/neo4j-apoc-procedures#fromtojson

CREATE p1=(m:Movie {title:'M'})<-[:ACTED_IN {role:'R1'}]-(:Actor {name:'A1'}), 
p2 = (m)<-[:ACTED_IN {role:'R2'}]-(:Actor {name:'A2'}) WITH [p1,p2] as paths 
CALL apoc.convert.toTree(paths) YIELD value RETURN value 
-> 
{_id=0, _type=Movie, title=M, 
acted_in=[ 
    {_id=1, _type=Actor, name=A1, acted_in.role=R1}, 
    {_id=2, _type=Actor, name=A2, acted_in.role=R2}]}