2017-06-29 60 views
2

我有三個節點類型的曲線:節點X,節點Y,並NodeZ如何檢查密碼節點的類型?

我有此暗號查詢:

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

這裏(d)可以可以是任一節點Y或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 

yz對應d。這是可能的嗎?

+0

而且,'y'和/或'z'應該與'd'相對應嗎?你能澄清你在做什麼嗎? – cybersam

回答

4

節點具有「標籤」,而不是「類型」(後者僅適用於關係)。

要獲取節點的標籤,可以使用LABELS()函數。因此,要測試節點n有標籤Foo,你可以做這樣的事情在Cypher支架:

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

然而,CASE子句不能包含MATCH條款。

將帖子

在特定情況下,像這樣的查詢(假定是,正如你所說,只爲dNodeYNodeZ標籤可能)可能工作:

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; 
相關問題