2017-06-29 3 views
2

I三のノードタイプとグラフた:私はこのCYPHERクエリNodeX、NodeY、及びNodeZサイファーのノードのタイプを確認するにはどうすればよいですか?

を有する:

MATCH (x:NodeX)-[*]->(d) 
WHERE x.Name = 'pqr' 
RETURN x,d; 

ここで(D)NodeY又はNodeZいずれかであることができます。 私は別々のノードタイプを扱うことを考えています。ような何か:

MATCH (x:NodeX)-[*]->(d) 
WHERE x.Name = 'pqr' 
WITH d 
CASE WHEN typeof(d)=NodeY THEN {MATCH (y:NodeY)-[*]-(z:NodeZ)} 
    WHEN typeof(d)=NodeZ THEN {MATCH (z:NodeZ)-[*]-(y:NodeY)} 
RETURN y,z 

yzdに対応しています。これは可能ですか?

+0

もdに対応すると考えられるyおよび/またはzがあるか?あなたがしようとしていることを明確にすることはできますか? – cybersam

答えて

4

ノードには「種類」ではなく「ラベル」があります(後の用語は関係にのみ適用されます)。

ノードのラベルを取得するには、LABELS()関数を使用できます。ノードnはラベルFooを持っているのであれば、テストするために、あなたは、サイファーにこのような何かを行うことができます。

CASE WHEN 'Foo' IN LABELS(n) THEN ... 

しかし、CASE句はMATCH句を含めることはできません。

[EDITED]あなたの特定のケースで

、(dのための可能な唯一のラベルがNodeYNodeZあり、あなたが言ったように、ということを前提とし)このクエリのようなものが働く可能性があります

MATCH (x:NodeX)-[*]->(d) 
WHERE x.Name = 'pqr' 
WITH d, CASE WHEN 'NodeY' IN LABELS(d) THEN 'NodeZ' ELSE 'NodeY' END AS otherLabel 
MATCH (d)-[*]-(other) 
WHERE otherLabel IN LABELS(other) 
RETURN d, other; 
関連する問題