Graph 自下而上求和图
给出neo4j中建模的下图 目标: 计算所有节点的总和乘以自下而上的边缘百分比 e、 g 地位: 我找到了Graph 自下而上求和图,graph,neo4j,cypher,Graph,Neo4j,Cypher,给出neo4j中建模的下图 目标: 计算所有节点的总和乘以自下而上的边缘百分比 e、 g 地位: 我找到了REDUCE函数() 但在我看来,这是自上而下的总结,而不是自上而下的总结 这是一个众所周知的名字的常见问题,而我不知道吗? neo4j或其他(图形)数据库/语言中是否有任何解决方案?这是一个非常有趣的解决方案: 我假设了两件事,首先所有节点都有:一个标签,其次节点和关系上的属性有键p 以下是一个工作查询: MATCH p=(:A)-[r]->(pike) WITH pike, co
REDUCE
函数()
但在我看来,这是自上而下的总结,而不是自上而下的总结
这是一个众所周知的名字的常见问题,而我不知道吗?
neo4j或其他(图形)数据库/语言中是否有任何解决方案?这是一个非常有趣的解决方案: 我假设了两件事,首先所有节点都有
:一个标签,其次节点和关系上的属性有键p
以下是一个工作查询:
MATCH p=(:A)-[r]->(pike)
WITH pike, collect(p) as paths
OPTIONAL MATCH (pike)-[r]->()
WITH
CASE r WHEN null THEN 1 ELSE r.p END as multiplier,
CASE r WHEN null THEN last(nodes(paths[0])).p
ELSE reduce(x=0, path in paths | x + (head(nodes(path)).p * head(rels(path)).p)) + last(nodes(paths[0])).p END as total
RETURN sum(total*multiplier) as total
背后的逻辑是:
找到一条路,用长矛攻击孩子们(首先用
)
如果可选匹配未通过,则乘数将为1,而不是关系属性上可能的浮点值
第二种情况,进行数学逻辑,如果这是派克的顶部(因此这里是nodeA
),它将只添加顶部节点的值,否则它将获取子节点的值
然后将分数加上乘法
您可以在此处进行测试:
MATCH p=(:A)-[r]->(pike)
WITH pike, collect(p) as paths
OPTIONAL MATCH (pike)-[r]->()
WITH
CASE r WHEN null THEN 1 ELSE r.p END as multiplier,
CASE r WHEN null THEN last(nodes(paths[0])).p
ELSE reduce(x=0, path in paths | x + (head(nodes(path)).p * head(rels(path)).p)) + last(nodes(paths[0])).p END as total
RETURN sum(total*multiplier) as total