gpt4 book ai didi

Neo4j Cypher 替代路径

转载 作者:行者123 更新时间:2023-12-04 20:02:09 29 4
gpt4 key购买 nike

我正在使用 Cypher,我需要构建一个如下所示的查询

(A) ----e1----(B)
\ |
\ |
e3 e2
\ |
\ |
(C)

其中 A、B 和 C 是节点,e1、e2 和 e3 关系分别连接 A 和 B、B 和 C 以及 A 和 C。

我感兴趣的是节点 A 和 C。当 e1、B 和 e2 存在(并尊重某些属性)或关系 e3 存在(并尊重某些属性)或两者兼有时,此模式应该匹配。我的问题是我无法将其转换为 Cypher 语言。
为了给关系一个标识符,我需要在 MATCH 子句中指定它,比如
MATCH (A)--[e1]--(B)--[e2]--(C), (A)--[e3]--(C)

但是这样做我告诉 Neo4j 我希望(e1 和 e3)和 e2 都存在,但事实并非如此。但是如果我不给这些关系一些标识符,我就无法搜索它们的任何属性。

如何构建此查询?

谢谢。

最佳答案

这是一个查询,它应该在每一行中返回一个不同的 A 和它所连接的所有不同 C 节点的集合,以您陈述的方式之一(或两者)。

我假设 A , B , 和 C都是节点标签。

为了清楚地展示该方法,这里是一个不查看属性值的简化查询

MATCH p=(a:A)-[e*1..2]-(c:C)
WITH p, a, c, RELATIONSHIPS(p) AS rels
WHERE LENGTH(rels) = 1 OR HEAD(TAIL(NODES(p))):B
RETURN a, COLLECT(DISTINCT c) AS cs

为了对属性值执行测试,您需要修改 WHERE 中的两个术语。条款(在 OR 的两侧)。我希望这很清楚。

关于Neo4j Cypher 替代路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370571/

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