Neo4J - 多个节点导致单行使用Python

时间:2017-06-14 18:08:41

标签: python list neo4j nodes transformation

我目前正在运行将关系数据库升级到Neo4J数据库的过程。到目前为止,我已经能够超越我最初在关系数据库(MySQL)中设计的所有内容。也就是说,直到我的报告到时为止。

我使用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 个答案:

答案 0 :(得分: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