2017-06-14 67 views
0

我目前正在運行將我的關係數據庫升級到Neo4J數據庫的過程。到目前爲止,我已經能夠超越我最初在關係數據庫(MySQL)中設計的所有東西。也就是說,直到需要編寫我的報告。Neo4J - 將多個節點結果轉換爲單行使用Python

我使用Python來查詢數據庫,我可以返回所有相關信息,但不是以我想要的方式返回。

代碼:

AList = session.run("match (dept:Department)<-[]-(d1:Domain)<-[]-(d2:Domain)<-[]-(a:TestAnswer)-[]->(q:SurveyQuestion) return dept.ABBR as Department, d1.DomainName as Forest, d2.DomainName as Domain, q.QuestionDesc as Question, a.Result as Answer ORDER BY Department") 

這將返回節點的精彩名單,由部門的縮寫,即對每一個問的問題的答案排序。

電流輸出的實施例:

部|森林|域名|問|答案|

Dname | ForestLocation |域名| Q1 | 90 |

Dname | ForestLocation |域名| Q2 | 1 |

我想重新創建此具有以下佈局,但我不能完全肯定,如果我必須要經過一個漫長的過程在Python 3或者,如果我可以使用某種形式的在Neo4j內實現最簡單的結果:

部門|森林|域| Q1 | Q2

Dname | ForestName | DomainName | 90 | 1

任何援助將不勝感激 - 或者如果有人能指出我在正確的方向,我可以找到答案,這也會有所幫助。

謝謝您的時間, 吉姆

+1

據我知道的Neo4j不能提供動態列,但如果你知道的問題,你想提前使用列,你應該能夠做到這一點。但是,您的標題表明您需要的只是將所有這一切都放在一行上,我假設每個部門/林區/域。你真的需要每個問題單獨列嗎?還是足以通過其他方式將問題和答案彙總到一行中? – InverseFalcon

+0

@InverseFalcon如果我可以將它放入自己的迭代器/列表中,那麼我可以使用print命令將其打印到CSV中以模擬由報告創建的原始表格(使用硬編碼標題)。這將是一個可以接受的解決方案 - 我怎麼能得出這個結論? –

回答

0

正如我在評論中提及,動態列未在Neo4j的,據我可以告訴支持。也就是說,有多種方法可以對結果進行彙總,以便每個部門/林/域都可以獲得一行,並在處理該行時爲以後的迭代分組問題和答案。

這裏的Cypher支架應該幫助你,使用pattern comprehension收集的問題和答案:

match (dept:Department)<--(d1:Domain)<--(d2:Domain) 
with dept, d1, d2, 
[(d2)<--(a:TestAnswer)-->(q:SurveyQuestion) | {Question:q.QuestionDesc, Answer:a.Result}] as answeredQuestions 
return dept.ABBR as Department, d1.DomainName as Forest, d2.DomainName as Domain, answeredQuestions 
ORDER BY Department