2017-02-27 2 views
1

ich eine Graphenstruktur in Neo4j für einen Fragebogen, die die folgenden Beziehungen haben:Cypher Query Language/Neo4j - Nested Returns von Variable Pfadlänge

(a:Category)-[:INITIAL_QUESTION]->(b:Question)-[c:Answer*]->(d:Question) 

wo der spezifische Fragetext in (b|d).text und den möglichen enthalten ist Antworten für jede Frage sind in der Beziehung enthalten c.response Aus der ersten Frage gibt es einige Pfade, die länger als andere sind. Ich möchte die Rückkehr in etwa so aussehen:

{"category": "example questionnaire category", 
"initialQuestion" : { 
        "id": 1, 
        "text": "Example text here", 
        "possibleAns": { 
         "yes" : { 
           "id": 2, 
           "text": "Second question text here?", 
           "possibleAns": { 
                "ans1": {/*Question 4 containing all possible child question nodes nested 
                   in possibleAns*/}, 
                "ans2": {/*Question 5 containing all possible child question nodes nested 
                   in possibleAns*/}, 
           } 
         }, 
         "no" :{ 
           "id": 3, 
           "text": "Different question text here?", 
           "possibleAns": { 
                "ans1": {/*Question 6 containing all possible child question nodes nested 
                   in possibleAns*/}, 
                "ans2": {/*Question 7 containing all possible child question nodes nested 
                   in possibleAns*/}, 
           } 
         } 
        } 
} 
} 

, so dass die gesamte Kategorie Fragebogen in einer einzigen, verschachtelten Karte enthalten ist. Ich habe einige andere Beispiele gesehen, konnte aber diese Abfragen nicht an meine Bedürfnisse anpassen, insbesondere angesichts der variablen Tiefe der Verzweigungen des Fragebogens.

Gibt es eine Cypher-Abfrage, die dies ermöglicht? Wenn nicht, was wäre der beste Ansatz, um den gesamten Fragebogen aus der Datenbank abzurufen?

Antwort

1

Ich denke, dass dies nicht mit Standardwerkzeugen (Chiffre etc.)

So geschehen ist, oder das Ergebnis von Chiffre-Abfrage in dem programmatisch json Baum verwandeln.

Oder, wenn Ihre Neo4j-Server-Versionen nicht weniger 3.0 können Sie versuchen apoc.convert.toTree:

MATCH path = (a:Category) 
      -[:INITIAL_QUESTION]->(b:Question)-[c:Answer*]-> 
      (d:Question) 
WITH collect(path) as paths 
CALL apoc.convert.toTree(paths) yield value as tree 
RETURN tree 
+0

danke! Genau das habe ich gesucht – aq13

Verwandte Themen