Cypher:避免重复节点

时间:2013-09-16 19:19:53

标签: neo4j cypher spring-data-neo4j

有以下关系

Bob-[:TWINS]-Alice

我需要归还所有双胞胎。下面是正在使用的密码,但返回重复

MATCH a-[:TWINS]-b 
RETURN a.name, b.name

I've set this up in Neo4j console here

如何不返回重复项?我知道这可以很容易地通过包括关系的方向来解决,但这里的方向是不相关的。所以想知道如何避免重复。

4 个答案:

答案 0 :(得分:6)

这是经典的方式:

MATCH a-[:TWINS]-b
WHERE id(a) < id(b)
RETURN a, b

答案 1 :(得分:3)

尝试这个,首先获取订购的名称对,然后使用“DISTINCT”删除重复项。

MATCH a-[:TWINS]-b 
RETURN DISTINCT CASE WHEN a.name < b.name  THEN a.name + ',' + b.name  ELSE b.name + ',' + a.name END AS result

答案 2 :(得分:0)

找到一种方法,但它只适用于最新版本。我正在寻找其他适用于早期版本或比这更简单的想法。

想法是在关系上使用DISTINCT消除重复项,然后使用startnodeendnode函数检索每个已识别关系的节点

MATCH p=a-[r:TWINS]-b 
WITH DISTINCT r AS rel 
WITH startnode(rel) AS n1, endnode(rel) AS n2 
RETURN n1.name, n2.name

答案 3 :(得分:0)

关系是方向性的,您使用忽略方向的查询表单。由于您似乎已经构建了数据以便双胞胎之间存在单一关系,因此您可以通过将查询限制为单一方向来返回双胞胎之间的单一关系:请注意其他 > < / strong>查询中的字符,然后要求关系在该方向上进行匹配。

MATCH a-[:TWINS]->b 
RETURN a.name, b.name