我有一个包含三种节点类型的图:NodeX,NodeY和NodeZ
我有这个密码查询:
MATCH (x:NodeX)-[*]->(d)
WHERE x.Name = 'pqr'
RETURN x,d;
Run Code Online (Sandbox Code Playgroud)
这里(d)可以是NodeY或NodeZ.我想分别处理不同的nodetypes.就像是:
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
Run Code Online (Sandbox Code Playgroud)
y并z对应于d.这可能吗?
cyb*_*sam 10
节点有"标签",而不是"类型"(后一个术语仅适用于关系).
要获取节点的标签,可以使用该LABELS()功能.因此,要测试节点n是否有标签Foo,您可以在Cypher中执行以下操作:
CASE WHEN 'Foo' IN LABELS(n) THEN ...
Run Code Online (Sandbox Code Playgroud)
但是,该CASE子句不能包含MATCH子句.
[EDITED]
在您的特定情况下,像这样的查询(假设,正如您所说,唯一可能的标签d是NodeY和NodeZ)可能有效:
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;
Run Code Online (Sandbox Code Playgroud)