对于以双向关系连接的节点,cypher返回两次

jan*_*ith 4 neo4j cypher

我有2个节点:(A),(B),由[:FRIEND]连接

当我运行以下命令时,

start n = node(*) match (n)-[r:FRIEND]-(b) return n.name, b.name;
Run Code Online (Sandbox Code Playgroud)

它返回2行:A,B和B,A.

我想知道,如何让它只返回一条记录,因为这种关系是双向的,A - [:FRIEND] -B和B - [:FRIEND] -A被认为是相同的结果.

谢谢.

Eve*_*man 9

一个技巧是where在ID上添加一个,所以你也可以按照一致的顺序获取它们:

start n = node(*) 
match (n)-[r:FRIEND]-(b) 
where id(n) < id(b) 
return n.name, b.name;
Run Code Online (Sandbox Code Playgroud)

http://console.neo4j.org/r/1ry0ga

如果它们之间存在多个关系(例如,在两个方向上),则可以添加不同的修改器以获得相同的结果:

start n = node(*) 
match (n)-[r:FRIEND]-(b) 
where id(n) < id(b) 
return distinct n.name, b.name;
Run Code Online (Sandbox Code Playgroud)