2015-03-31 117 views
0

我有一個查詢,我不確定如何實施或者如果在cypher中有效。無論如何,這是我想要做的。Neo4j密碼查詢已知路徑

我基本上是這樣的圖:

Example Graph

我想所有的nodes/relationships13:空節點可以是任意數量的節點)。我也想要所有的(如果有的話),來自最後兩個節點的入邊和只有最後兩個不在原路徑中的節點。在這種情況下,也應該添加紅色的邊緣。

我已經知道我想要的路徑。所以在這個例子中,我會給節點ID 1, ..., 2, 3,我想我知道如何獲得第一部分的路徑。

MATCH (n)-->() WHERE n.nid IN ['1', '...', '2', '3'] RETURN n 

我只是不知道如何獲得路徑中最後兩個節點的紅色邊緣。另外,我沒有給出節點ID 4和5.我們可以假定連接1, ..., 2, 3的邊緣全部具有相同的label,並且所有其他邊緣具有不同的label

我想我需要使用merge,但不知道如何去做。

或者如果有人知道如何在gremlin中做到這一點,我全部都是耳朵。

回答

1

這是否適合您?

MATCH ({nid: '1'})-[:t*]->(n2 {nid: '2'})-[:t]->(n3 {nid: '3'}) 
OPTIONAL MATCH()-[t42]->(n2) 
    WHERE (TYPE(t42) <> 't') 
OPTIONAL MATCH()-[t53]->(n3) 
    WHERE (TYPE(t53) <> 't') 
RETURN COLLECT(t42) AS c42, COLLECT(t53) AS c53; 

我給所有的左路徑上的關係(你圖中)的type「T」。 (術語label用於節點,而不是關係。)。你說我們可以假設其他關係沒有那種類型,所以這個查詢利用了這個事實從結果中濾除了類型「t」關係。

此查詢還使4-2和5-3關係成爲可選項。

+0

這讓我更接近我需要的東西,但是我遇到了4-2之間的關係不存在但是5-3之間的關係並沒有從查詢返回的問題。如果我從查詢中刪除4-2的部分,則返回節點和rels。看起來這個查詢假設rel 4-2在那裏,否則不會返回任何東西。有沒有告訴密碼的方法,我不在乎它是否在那裏;返回你找到的東西?謝謝您的幫助! – Jeff 2015-03-31 17:41:14

+0

我已更新我的答案,使4-2和5-3關係可選。 – cybersam 2015-03-31 18:30:27