Graph 自下而上求和图

Graph 自下而上求和图,graph,neo4j,cypher,Graph,Neo4j,Cypher,给出neo4j中建模的下图 目标: 计算所有节点的总和乘以自下而上的边缘百分比 e、 g 地位: 我找到了REDUCE函数() 但在我看来,这是自上而下的总结,而不是自上而下的总结 这是一个众所周知的名字的常见问题,而我不知道吗? neo4j或其他(图形)数据库/语言中是否有任何解决方案?这是一个非常有趣的解决方案: 我假设了两件事,首先所有节点都有:一个标签,其次节点和关系上的属性有键p 以下是一个工作查询: MATCH p=(:A)-[r]->(pike) WITH pike, co

给出neo4j中建模的下图

目标:

计算所有节点的总和乘以自下而上的边缘百分比

e、 g

地位:

我找到了
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,而不是关系属性上可能的浮点值
  • 第二种情况,进行数学逻辑,如果这是派克的顶部(因此这里是node
    A
    ),它将只添加顶部节点的值,否则它将获取子节点的值
  • 然后将分数加上乘法
  • 您可以在此处进行测试:

    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