我有以下查询:
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连接的节点,反之亦然?
我对他们真正独立分享的联系感兴趣,而不是唯一的联系是彼此分享的。
答案 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)})