2015-05-24 106 views
1

我有以下查詢,我想避免重複的路徑(simetric也)。neo4j密碼避免重複路徑

MATCH (a:PERSON)-[:LIKES]->(b:PERSON)-[:LIKES]->(a) return a,b 

我已嘗試DISTINCT關鍵字,但我得到和語法錯誤。

林尋找類似(但也失敗了):

MATCH path=(a:PERSON)-[:LIKES]->(b:PERSON)-[:LIKES]->(a) 
where DISTINCT(path) 
return a,b 

回答

1

你可以只添加一個簡單的測試,以確保一個大於另一個這樣你就不會收到相同的配對更比一次。

MATCH (a:PERSON)-[:LIKES]->(b:PERSON)-[:LIKES]->(a) 
where id(b) > id(a) 
return a,b 
+0

我沒有看到它,怎麼一個<> b避免得到相同的配對不止一個。 – Ricardo

+0

不是'<>',而是大於或小於'。你匹配'a - [:LIKES] - > b'並且相反'b - [:LIKES-> a'。所以當你得到這些閉環匹配之一時,它會向前和向後運行。你要返回的是一對節點,所以對於每兩個人他們將在每個位置與一個人產生兩場比賽。比較運算符的原則是隻返回其中一個匹配。由於節點的ID始終存在且唯一,因此總是會比另一個更大,並且只返回一對而不是兩次。 –