您可以使用TYPE(<relationship>)
函数检查关系关系类型。所以MATCH (a)-[r1]-(b)-[r2]-(c) WHERE TYPE(r1) = TYPE(r2) RETURN *
将匹配所有其中r1和r2是相同类型关系的元组。
然后,您可以指定关系的方向进入((a)-[r1]->(b)<-[r2]-(c)
)或发送((a)<-[r1]-(b)-[r2]->(c)
)
注意:使用暗号,它确保了无节点在一个单一的模式匹配重新审视,所以你不需要检查一个不是c(a <> c
)
// category 1 =>
MATCH()-[r1]->(b:C)<-[r2]-()
WHERE TYPE(r1) = TYPE(r2)
WITH DISTINCT b
MATCH (a:A)-[*..25]->(b)
RETURN DISTINCT a
// category 1, known relation =>
MATCH()-[r1:B1]->(b:C)<-[r2:B1]-()
WITH DISTINCT b
MATCH (a:A)-->()-->(b)
RETURN DISTINCT a
// category 2 =>
MATCH()<-[r1]-(b:B)-[r2]->()
WHERE TYPE(r1) = TYPE(r2)
WITH DISTINCT b
MATCH (a:A)-[*..25]->(b)
RETURN DISTINCT a
// category 2, known relation =>
MATCH()<-[r1:B1]-(b:B)-[r2:B1]->()
WITH DISTINCT b
MATCH (a:A)-->(b)
RETURN DISTINCT a
谢谢汤姆,指出这件事。这就说得通了。 但是,(对不起),我之前添加的图像出现了问题。我已经更新了图像。 在新的场景中,我无法按照您指出的方式将它们分开。 –
随着这些变化,你的查询变得更加没有意义。你实际上试图区分的是,如果C之间存在一条或多条路径(具有给定的ID,因此完全没有意义来计算它,总是只有一条!!!)和A,这是正确的吗? –
添加了基于新映像的查询... –