2014-11-20 31 views
1

我正在寫一個查詢,以便從多條路徑檢索節點和關係:收集不同的節點,關係多行

MATCH path=(p:Label)-[*..100]->() 
RETURN [n in nodes(path) | ID(n)] as nodeIds, 
     [n in nodes(path)] as nodes, 
     [r in relationships(path) | ID(r)] as relationshipIds, 
     [r in relationships(path) | type(r)] as relationshipTypes, 
     [r in relationships(path)] as relationships 

但是我有多個行(對應於每個路徑),以可能是相同的數據。

我想有一個包含所有不同nodeIdsrelationshipIds,...

謝謝一行!

回答

3

當我運行這個查詢時,我沒有得到重複的數據。但我可以看到爲什麼你會認爲有重複的數據。首先,你可以試試這個:

MATCH path=(p:Label)-[*..100]->() 
WITH DISTINCT(path) as path 
RETURN [n in nodes(path) | ID(n)] as nodeIds, 
     [n in nodes(path)] as nodes, 
     [r in relationships(path) | ID(r)] as relationshipIds, 
     [r in relationships(path) | type(r)] as relationshipTypes, 
     [r in relationships(path)] as relationships 
ORDER BY length(path) LIMIT 1; 

這將確保所有路徑都不同,這將意味着你不可能重複的數據,但我認爲這應該已經是這樣的。按路徑長度排序意味着最長的路徑先行,而限制1意味着最長的路徑。

無論如何,您可能看到的重複是由於路徑和路徑片段。假設我有a->b->c。您的查詢將報告三條路徑:

  • a->b->c
  • a->b
  • b->c

注意這是正確的答案。但就節點ID和關係ID而言,您會在結果集中看到大量重複,因爲每個節點ID在結果中至少會出現兩次。

+0

感謝您的快速回復。但是如果有一種方法可以收集所有這些ID在單行中? – matth3o 2014-11-20 18:37:34

+2

收集所有的ID?在我的例子中,有三條路徑。應該有三條結果線。單行包含什麼?只有最長的路徑?哪三個? – FrobberOfBits 2014-11-20 19:21:13

+0

你是對的,我真正想要的是獲得所有最長的路徑。 – matth3o 2014-11-20 19:29:55