【发布时间】:2021-10-05 15:42:46
【问题描述】:
对于 neo4j/cypher 来说相当陌生。我试图返回一个由 2 个不同路径访问的属性,具体取决于标签,在本例中为 (n) 的标签。
MATCH (k:KeyNode)<-[:BASED_ON]-(n)-[:CONTROLS|:MODIFIES]->()
WHERE id(k)=123456
//if label(n) = LabelA
OPTIONAL MATCH (n)<-[:LABEL_A_REL]-(c:Controller)-[:CONTROLS]->(r:Resource)-[:TYPE_OF]->(rt:ResourceType)
//if label(n) = NotLabelA
OPTIONAL MATCH (n)-[:LABEL_NOT_A_REL]->(r:Resource)-[:TYPE_OF]->(rt:ResourceType)
OPTIONAL MATCH (r)-[:PARENT*]->(ro:Room)
RETURN ID(r) as resourceId, ID(ro) as siteId, ID(rt) as rt:ResourceType
按原样,路径定义的第一个可选匹配及其定义的节点优先,第二个选择匹配/路径节点重新定义保持不变,我假设因为密码不会重新定义变量。目标是在 2 条可能的路径上找到 (r) 和 (rt)。
我考虑过使用 CASE WHEN 结构,但从文档中我只看到返回单个属性的选项,而不是多个(尽管我可能是错的)
【问题讨论】: