2016-07-25 32 views
1

我一直在努力尋找解決方案來解決我的問題與Cypher .. 我想總結一個給定的關係在整個路徑。Cypher(Neo4j),如何通過完整路徑對給定的屬性進行求和

例如: 1 - > 2 - > 3 - > 4 我想要計算節點1金額屬性節點1,2 3和4的總和(在這種情況下圖3和4都是節點2的目標,我無法在這裏代表)

我的理解是我需要使用collect()和reduce,但我仍然沒有得到正確的答案。我有以下幾點:

MATCH (n)-[p]->(m) 
WITH m,n, collect(m) AS amounts 
RETURN n.ID as Source,m.ID as Target,n.Amount, 
REDUCE(total = 0, tot IN amounts | total + tot.Amount) AS totalEUR 
ORDER BY total DESC 

我得到一個語法錯誤,但我敢肯定,即使沒有,我將只總結直接關係的語法錯誤......

你們會知道我是否在正確的道路上?

乾杯 最大

回答

0

您需要查詢一個可變長度的關係:

MATCH p = (n)-[*]->(m) 
RETURN n.ID as Source, m.ID as Target, n.Amount, 
     reduce(total = 0, tot IN nodes(p) | total + tot.Amount) AS totalEUR 
ORDER BY totalEUR DESC 

您不能total這是一個局部變量的reduce功能訂購。

注意,這將返回行的每一個路徑,即1-->21-->2-->31-->2-->3-->42-->32-->3-->43-->4,因爲你還沒有一個具體的n匹配。

+0

嗨,弗蘭克,謝謝你的回答! 我無法在輸出中獲得總和,它全部標記爲空。我想知道我是否可能有數據類型問題? – brmaxime

+0

首先通過返回路徑(或者第一個,至少使用'LIMIT')而不用'reduce'部分來查看/調試您實際匹配的內容。就像你提出的那樣,查詢是非常通用的,我認爲你實際上有一些額外的標籤和約束,這裏沒有顯示。 –

相關問題