gpt4 book ai didi

neo4j - 如何在 cypher 中检查节点的类型?

转载 作者:行者123 更新时间:2023-12-04 22:28:26 25 4
gpt4 key购买 nike

我有一个包含三种节点类型的图: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
yz对应 d .这有可能吗?

最佳答案

节点有“标签”,而不是“类型”(后一个术语仅适用于关系)。

要获取节点的标签,可以使用 LABELS()功能。因此,要测试是否节点 n有标签 Foo ,你可以在 Cypher 中做这样的事情:

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

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

[编辑]

在您的特定情况下,类似于此查询的内容(假设,正如您所说, 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;

关于neo4j - 如何在 cypher 中检查节点的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com