Neo4j Cypher:只提取与其他两个节点有独立连接的节点?
我有以下疑问:Neo4j Cypher:只提取与其他两个节点有独立连接的节点?,neo4j,cypher,Neo4j,Cypher,我有以下疑问: MATCH (rebecca:Person)-[r1*1..3]-(robert:Person) WHERE rebecca.name=Rebecca AND robert.name='Robert' RETURN rebecca, robert, extract(x IN r1 | {rel: x, start: startNode(x), end: endNode(x)}) 这将返回Rebecca或Robert的3个跃点内的所有节点和边。所以它包括一些节点,从Rebec
MATCH (rebecca:Person)-[r1*1..3]-(robert:Person)
WHERE rebecca.name=Rebecca AND robert.name='Robert'
RETURN rebecca, robert,
extract(x IN r1 | {rel: x, start: startNode(x), end: endNode(x)})
这将返回Rebecca或Robert的3个跃点内的所有节点和边。所以它包括一些节点,从Rebecca到2个跃点,从Robert到3个跃点,他的连接是通过Rebecca
有没有办法排除Robert唯一通过Rebecca连接的节点,反之亦然
我感兴趣的是他们真正独立共享的连接,而不是唯一通过彼此连接的连接 有3次跳跃,通过另一次跳跃的唯一可能方式是如果(本例来自Rebecca):
rebecca->robert->node->robert
所以罗伯特必须出现两次(或者丽贝卡,从另一个方向)
在我看来,你只需要一个限制,丽贝卡和罗伯特在这条路上只能出现一次:
MATCH p=(rebecca:Person)-[r1*1..3]-(robert:Person)
WHERE rebecca.name=Rebecca AND robert.name='Robert'
AND SINGLE(rebecca in nodes(p)) AND SINGLE(robert in nodes(p))
RETURN rebecca, robert,
extract(x IN r1 | {rel: x, start: startNode(x), end: endNode(x)})
你能举一个你目前看到的不想被考虑的路径的例子吗?在该路径中,Rebecca或Robert是否出现两次?请记住,您的查询是针对从Rebecca到Robert有三个跃点的路径,因此节点可以最远(该节点不是Rebecca或Robert)距离其中一个节点有两个跃点(因为最后一个跃点需要到Rebecca或Robert,具体取决于路径的起始位置)。您将永远无法获得距离两个节点都有2个跃点的节点,或距离其中一个节点有3个跃点的节点。