我有一个像这样的图表 我需要的是为连接到HPKP-X节点的每个节点获取属性X的总和。
MATCH (p:Project{key:"HPKP"})-[*]-(i:Issue)
RETURN i.key, i.worklog
但是我希望它按HPKP-X节点分组并排除关联关系(见图1)。
到目前为止我到了这个
MATCH c = (p:Project{key:"HPKP"})-[r:CONTAINS]->(i:Issue)-[x*]-(s:Issue)
WHERE NONE(x in relationships(c) where type(x) = "RELATES")
RETURN distinct i.key, sum(i.worklog)
但这是重复我的总和结果。所以我需要的是查询,它会给我带来这样的结果:
HPKP-3 worklog = HPKP-3.worklog + MIKA-3.worklog = 100 + 100 = 200
HPKP-2 worklog = HPKP-2.worklog + MIKA-2.worklog = 200 + 200 = 400
HPKP-1 worklog ......
答案 0 :(得分:0)
如果您知道要列入白名单的所有关系类型(例如,CAUSES
和SPLITS
),则可以使用APOC函数apoc.path.subgraphNodes来获取子图节点(包括只有Issue
个节点可以通过感兴趣的Issue
从每个CONTAINED
节点Project
到达:
MATCH c = (p:Project{key:"HPKP"})-[:CONTAINS]->(i:Issue)
CALL apoc.path.subgraphNodes(i, {
relationshipFilter: 'CAUSES|SPLIT',
labelFilter: '+Issue',
maxLevel: 10,
filterStartNode: false}) YIELD node
RETURN i.key AS key, SUM(node.worklog) AS total_worklog;
注意:上面的示例使用10作为必需的maxLevel
,以限制搜索节点的深度。 maxLevel太高会导致查询内存不足或耗时太长(如果DB中确实存在长路径)。