2015-05-24 88 views
1

我有以下查询,我想避免重复的路径(simetric也)。neo4j密码避免重复路径

MATCH (a:PERSON)-[:LIKES]->(b:PERSON)-[:LIKES]->(a) return a,b 

我已尝试DISTINCT关键字,但我得到和语法错误。

林寻找类似(但也失败了):

MATCH path=(a:PERSON)-[:LIKES]->(b:PERSON)-[:LIKES]->(a) 
where DISTINCT(path) 
return a,b 

回答

1

你可以只添加一个简单的测试,以确保一个大于另一个这样你就不会收到相同的配对更比一次。

MATCH (a:PERSON)-[:LIKES]->(b:PERSON)-[:LIKES]->(a) 
where id(b) > id(a) 
return a,b 
+0

我没有看到它,怎么一个<> b避免得到相同的配对不止一个。 – Ricardo

+0

不是'<>',而是大于或小于'。你匹配'a - [:LIKES] - > b'并且相反'b - [:LIKES-> a'。所以当你得到这些闭环匹配之一时,它会向前和向后运行。你要返回的是一对节点,所以对于每两个人他们将在每个位置与一个人产生两场比赛。比较运算符的原则是只返回其中一个匹配。由于节点的ID始终存在且唯一,因此总是会比另一个更大,并且只返回一对而不是两次。 –