2017-02-27 107 views
1

我在Neo4j的圖形結構具有以下關係的調查問卷:的Cypher查詢語言/ Neo4j的 - 可變路徑長度的嵌套返回

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

其中,具體的問題,全文載於(b|d).text和可能的每個問題的答案都包含在關係中c.response 從最初的問題來看,有一些路徑比其他路徑長。我希望返回看起來像這樣:

{"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*/}, 
           } 
         } 
        } 
} 
} 

因此,整個類別問卷都包含在一個嵌套的地圖中。我見過其他一些例子,但是無法調整這些查詢以適應我的需求,尤其是考慮到問卷分支的可變深度。

有沒有一個Cypher查詢,使這成爲可能?如果不是,從db中檢索整個調查問卷的最佳方法是什麼?

回答

1

我認爲這是不使用標準工具進行(CYPHER等)

所以,或暗號查詢的JSON樹編程轉換的結果。

或者,如果您的Neo4j服務器版本不低於3.0,你可以嘗試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

謝謝!這正是我所期待的 – aq13