2014-01-05 53 views
0

我有一張圖表顯示了公司之間的財務關係 - 欠款的關係,哪些公司欠公司欠款。我尋求一種獨特的關係 - 圈子,後者是封閉的。所以如果我欠你錢,我們發現不知怎麼,你欠我錢讓我結清債務。這些公司由稅號標識。爲此,我用這個暗號查詢:Neo4J找到獨特的結果

start n=node(*) 
match p=n-[r:OWES*1..200]->n 
where HAS(n.taxnumber) 
return extract(s in relationships(p) : s.amount), 
     extract(t in nodes(p) : ID(t)), 
     length(p) ; 

但我也得到這樣

Company1-Company2-company1-Company-3 

結果顯示我這個結果早在我的Java應用程序。在我將它們解析爲java代碼之後,我是否應該隱藏這個結果 - 一個公司顯示兩次的結果。 這對於邏輯來說很好,但我需要的結果是公司只顯示一次,我不想要多次獲得同一家公司的結果。如何修改我的Cypher查詢?我想要的是,公司在結果中只能處於結果的開始和結束,而不是以某種方式在中間盤旋。

回答

2

您可以嘗試檢查路徑節點是否不包含您的開始節點。

start n=node(*) 
match p=n-[:OWES*1..200]->(m), (m)-[r:OWES]->n 
where HAS(n.taxnumber) 

AND NOT(n IN tail(nodes(p))) 

return extract(s in relationships(p) : s.amount) + r.amount, 
     extract(t in nodes(p) : ID(t)) + ID(n), 
     length(p) + 1; 

不幸的是,在1.8.2沒有下,只有tail(coll)沒有簡單的方法來排除從檢查的最後一個元素。這就是爲什麼我必須分手並最終修復你的聚合。

+0

當我運行它作爲開始n =節點(*)匹配p = n- [r:OWES * 1..200] - > n其中HAS(n.taxnumber)AND NOT(n IN節點(p)[ (p):s.amount),extract(t in nodes(p):ID(t)),length(p);我得到Unclosed括號錯誤... –

+0

我在我的應用程序中使用Neo4j-cypher-1.8.2.jar –

+0

我在'[1 ..- 1]'這個部分得到錯誤。 –