Cypher:只提取与其他两个节点有独立连接的节点?

时间:2017-02-24 16:54:16

标签: 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跳内的所有节点和边缘。所以它包括一些来自Rebecca的2跳的节点,以及来自Robert的3个跳跃,他的连接是通过Rebecca。

有没有办法可以排除Robert唯一通过Rebecca连接的节点,反之亦然?

我对他们真正独立分享的联系感兴趣,而不是唯一的联系是彼此分享的。

1 个答案:

答案 0 :(得分:0)

有3个跳跃,唯一可能通过另一个的方法是if(来自Rebecca这个例子):

rebecca->robert->node->robert

所以罗伯特必须出现两次(或者rebecca,从另一个方向出现)。

在我看来,你只需要一个限制,即rebecca和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)})