2014-03-24 41 views
0

我有一個網絡,在這個用戶可以像下面的模式連接。neo4j-cypher:任何兩個用戶之間的所有路徑

(u:user{guid:123})<-[r]-(mg)<-[r2]-(c) 
(u:user{guid:123})<-[r]-(mg)<-[r2]-(c)<-[r3]-(mg2)<-[r4]-(c2) 
(u:user{guid:123})<-[r]-(mg)<-[r2]-(c)-[r3]->(mg2)-[r4]->(c2)<-[r5]-(mg3)<-[r6]-(c3) 
(u:user{guid:123})<-[r]-(mg)<-[r2]-(c)-[r3]->(mg2)-[r4]->(c2)<-[r5]-(mg3)<-[r6]-(c3)<-[r7]-(mg4)<-[r8]-(c4) 

'u'是具有GUID的用戶。

兩個用戶之間有多種連接模式。

我想列出給定GUID的兩個用戶之間的所有路徑。 請提供一些提示來實現這一點。

回答

2

以下查詢將返回長度介於1和5之間的所有路徑。如果您需要更長的路徑(但它會極大地影響查詢性能),請適應它。您可能需要在路徑中添加一個方向。

MATCH path=(:user{guid:123})-[*1..5]-(:user{guid:456}) 
RETURN path 
+0

謝謝。這會返回所有路徑,包括通過其他用戶的路徑我如何避免涉及其他用戶的路徑?我只想要像:(:user {guid:123})< - [r] - (mg)< - [r2] - (c) - [r2] - >(mg) - [r] - (:user {guid:456}) –

+1

如果您不想包含其他用戶,請限制關係類型和方向。您還可以添加WHERE NONE(n在節點(路徑)[1 ..- 1] WHERE n:user中),但該過濾器僅在生成路徑後應用。 –

+0

謝謝,這對我有用。我在哪裏可以找到關於構建這些查詢的neo4j-cypher文檔? –

相關問題