Neo4j Cypher 替代路径
Neo4j Cypher alternative paths
我正在使用 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 都存在,但事实并非如此。但是如果我不给这些关系一些标识符,我就不能搜索它们的任何属性。
如何构建此查询?
谢谢。
这是一个查询,它应该 return 在每一行中,一个不同的 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
的任一侧)。我希望这是清楚的。
我正在使用 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 都存在,但事实并非如此。但是如果我不给这些关系一些标识符,我就不能搜索它们的任何属性。
如何构建此查询?
谢谢。
这是一个查询,它应该 return 在每一行中,一个不同的 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
的任一侧)。我希望这是清楚的。