给出了neo4j中建模的以下图表
目标:
计算所有节点的总和乘以自下而上的边缘百分比。
e.g。
(((30*.6)+(50*.1)+100)*.5)+10)=71,5
状态:
我找到REDUCE
函数(http://neo4j.com/docs/stable/query-functions-collection.html#functions-reduce)
但在我看来,它从上到下总结,而不是起动。
这是一个众所周知的名字的commen问题,我不知道吗? 在neo4j或其他(图形)数据库/语言中是否有任何解决方案?
答案 0 :(得分:2)
这是一个非常有趣的问题:
我假设了两件事,首先所有节点都有:A
标签,其次是节点上的属性,关系有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
背后的逻辑:
WITH
)A
),它只会添加顶部节点的值,否则它将采用子节点的值您可以在此处进行测试:http://console.neo4j.org/r/ih8obf