2015-11-19 88 views
1

給出以下圖形中的Neo4j建模總和圖表頂部

enter image description here

目標:

計算乘以從底部向上的邊緣的百分比的所有節點的總和。

例如

(((30*.6)+(50*.1)+100)*.5)+10)=71,5 

狀態:

我發現REDUCE功能(http://neo4j.com/docs/stable/query-functions-collection.html#functions-reduce) ,但在我看來,從上總結,而不是bootom達到底部。

這是一個衆所周知的名字的問題,我不知道嗎? neo4j或其他(圖形)數據庫/語言中是否有解決方案?

回答

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 

的背後的邏輯:

  1. 查找一個深度的路徑,由狗魚agreggate孩子(第一WITH
  2. 萬一可選匹配沒有通過,乘法器將代替該關係屬性
  3. 第二種情況的可能的浮點值1 ,做數學邏輯,如果這是pikes的頂部(因此這裏是節點A),它將只添加頂部節點的值,否則將採用兒童的值
  4. 然後它將總分+乘法

您可以在這裏測試:http://console.neo4j.org/r/ih8obf