2016-08-02 101 views
0

我有一組像下面的示例圖像的節點。是否有一個密碼查詢可以檢查一個節點是「關閉」還是「開啓」(綠色);如果它是「開」,則返回「開」節點連接的節點和連接到「開」的原節點。如果節點「關閉」,它只是返回連接到它的節點。在這個例子中它應該返回label1和label2,但不是label3。Neo4j檢查屬性密碼

example

+0

如果'label3'連接到另一個打開的綠色節點會發生什麼? – cybersam

+0

它應該仍然返回相同的。在這種情況下,我們從label1開始,如果我們要從label3開始,那麼它會有所不同。 –

回答

1

您可以使用optional matchwith組合爲union

// Is the starting node 
MATCH (S {name: 'label1'}) 
WITH S 
    // Get the nodes to which have access through a pattern of "ON" 
    OPTIONAL MATCH (S)-[:connect]->({on: true})-[:connect]->(onC) 
WITH S, collect(distinct onC) as onConnect 
    // Get the nodes to which have access through a pattern of "OFF" 
    OPTIONAL MATCH (S)-[:connect]->({on: false})<-[:connect]-(offC) 
WITH S, onConnect, collect(distinct offC) as offConnect 
    // Remove possible duplicates 
    UNWIND S + onConnect + offConnect as N 
RETURN collect(distinct N) as result 
0

我假設 '開' 和 '關' 是對參數的狀態。我將在代碼中將其稱爲狀態。 我還假設你想從一個特定的節點開始。 (a) - [r:connect * ..] - >(b)其中ID(n)= 1我不確定你是如何得到這個節點的,所以我會假設你有這個ID並且它等於1

MATCH b.State ='on'return b