Neo4j Cypher中多变量的匹配

Neo4j Cypher中多变量的匹配,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我试图为每个雇主/组织统计/列出具有特定技能的人员。根据一个人是否完成了两个特定课程事件中的一个,确定该人的技能。一个人可以[:WORK\u AT]->Dep-[:PART\u OF]->Org或[:WORK\u AT]->Org。使用随附的(不雅的)代码,我可以列出单个组织的人员,但很难找到方法为所有组织(机构)(雇主)列出这些人员 MATCH(p:Person)-->(l:Event),(o:Org)所以这是一个完美的例子,您可能有一个可选的连接/关系,可能存在,也可能不存在 传统上,您可能

我试图为每个雇主/组织统计/列出具有特定技能的人员。根据一个人是否完成了两个特定课程事件中的一个,确定该人的技能。一个人可以[:WORK\u AT]->Dep-[:PART\u OF]->Org或[:WORK\u AT]->Org。使用随附的(不雅的)代码,我可以列出单个组织的人员,但很难找到方法为所有组织(机构)(雇主)列出这些人员


MATCH(p:Person)-->(l:Event),(o:Org)所以这是一个完美的例子,您可能有一个可选的连接/关系,可能存在,也可能不存在

传统上,您可能希望UNION来实现这一点,但实际上我们有一篇知识库文章提供了另一个选项,其中我们使用下限为0的可变长度关系,这意味着我们可以匹配模式中甚至不存在该关系的路径

在您的情况下,用法如下所示:

MATCH (p:Person)-->(l:Event), (o:Org)<-[:PART_OF*0..1]-()<-[:WORKS_AT]-(p:Person) 
WHERE (l.name="course a1" OR l.name="course a2") 
AND o.name="University A" 
RETURN o.name, count(DISTINCT(p))

MATCH(p:Person)-->(l:Event),(o:Org)非常感谢。。。这确实解决了我的问题(没有`和o.name“University A”'),我尝试使用与上面类似的匹配来显示图表;但是,我只得到那些与组织有直接关系的人(不是Person-[:WORKS\u AT]->Dep-[:PART\u of]->Org的替代路径。显示具有P-Dep-Org路径的人时没有任何组织或Dep关系。//匹配(P:Person)-[:MEMBER\u of]-(l:Project)-[:HOSTED\u BY](I:Infrastructure),(o:Org)@AndreasJaunsen您需要检查所讨论的关系是否确实存在,关系类型的输入错误或方向上的错误是否会导致不匹配。有关您的案例的其他帮助,请尝试在
MATCH (p:Person)-->(l:Event), (o:Org)<-[:PART_OF*0..1]-()<-[:WORKS_AT]-(p:Person) 
WHERE (l.name="course a1" OR l.name="course a2") 
AND o.name="University A" 
RETURN o.name, count(DISTINCT(p))