Cypher查询聚合关系属性

时间:2015-09-18 17:51:17

标签: neo4j cypher

我有一个Neo4j图,其中包含PI和官员节点,以及它们之间的关系(每个节点都有一个机构属性)。我正在尝试为每个PI创建一个inst_list属性,列出所有边缘的所有机构属性。我仍在学习Cypher的方法,但对于为什么这只是为每个PI创建一个空数组感到困惑:

MATCH (p:pi:DOE)-[a:award]-(o:officer:DOE)
WITH pi, a, COLLECT(distinct a.instituion) as insts
SET pi.inst_list=insts

似乎这是COLLECT的一个问题,如

MATCH (p:pi:DOE)-[a:award]-(o:officer:DOE)
WITH a.institution AS insts
RETURN insts

返回所有预期值。

1 个答案:

答案 0 :(得分:4)

您只需要从WITH子句中删除a

MATCH (p:pi:DOE)-[a:award]-(o:officer:DOE)
WITH p, COLLECT(distinct a.institution) as insts
SET pi.inst_list=insts

通过加入a,您没有为每个institution收集p属性,而是为每个pa收集了什么都不做。

我还假设你的意思是p而不是pi;在上面的查询中,p是标识符,pi是标签之一。您在institution中也有一个拼写错误,这可能是您的数组为空而不是单个值的原因。