2016-05-19 9 views
0

Ich habe Grafik mit jedem Knoten mit Eltern-Beziehung mit seinem Kind (wie in angehängten Bild gezeigt) und ein Name-Attribut. enter image description here Ich mag aus dem verschachtelten JSON-Objekt, wie dies in der diese Grafik vor:Repräsentieren unendliche Tiefe Knoten in verschachtelten JSON-Form in Neo4j

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

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

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

ich jede Tiefe zu durchqueren will, so die rlationship Art sein sollte (a) - [*] -> (b). Mit Bezug auf this question, kam ich mit folgenden Abfrage auf:

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

Aber die obigen Abfrage folgenden Ergebnis liefert:

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] 
    ] 

Also, was die mögliche Lösung diesen Voll Baum darzustellen in der sein könnte, Form von Json-Objekt wie oben erwähnt?

+0

Können Sie bitte die Beispielausgabe anhängen, wenn es einige –

+0

Erledigt gibt. habe gerade meine Frage und die geteilte Ausgabe der Anfrage bearbeitet! –

+0

Ich kenne die genaue Lösung nicht, aber die Übereinstimmung (Eltern {Name: "A"}) - [*] -> (Kind) stimmt mit allen Knoten überein, die mit A als Kind von A verbunden sind. Sie erhalten nicht das unmittelbare Elternteil dieses Kindes. –

Antwort

1

Ich habe eine Funktion wie diese APOC, es fühlen Sie sich frei, um zu überprüfen: 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}]}