2016-08-02 10 views
0

私は以下の例のイメージのようなノードのグループを持っています。ノードが「オフ」または「オン」(緑色)になっているかどうかを確認できるサイファークエリがありますか。それが「オン」の場合、「オン」ノードが接続するノードおよび「オン」に接続する元のノードを戻す。ノードが「オフ」の場合、ノードに接続するノードが返されます。この例では、label1とlabel2を返しますが、label3は返しません。Neo4jプロパティcypherを確認

example

+0

'label3'がオンになっている別の緑色のノードに接続するとどうなりますか? – cybersam

+0

それでも同じものが返されるはずです。この場合、label1から開始しています。label3から開始する場合は別のラベルになります。 –

答えて

1

あなたはunionとしてoptional matchwithの組み合わせを使用することができます。

// 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

私は、「オン」と「オフ」は、パラメータの状態であると仮定しています。私はコード内でStateと呼ぶつもりです。 また、特定のノードで開始することを前提としています。私はあなたがこのノードをどのように取得するか分からないので、あなたがIDを持っていると仮定して、それが1と等しいと仮定します。

MATCH(a) - [r:connect * ..]→(b)ID(n)= 1 b.State = 'on' return b