Neo4j Cypher从包含排序的简单查询中删除重复项

时间:2016-10-04 14:40:55

标签: neo4j cypher

我是Neo4J的新手,我无法完成这个简单的查询工作。 我的数据看起来像这样:

(a)-[:likes]->(b)
(a)-[:likes]->(c)

现在我想向每个喜欢别人的人提取一份清单。

尝试

match (u)-[:likes]->(p) return u order by p.id desc;

这给了我一份(a)的副本。 我尝试使用distinct:

match (u)-[:likes]->(p) return distinct u order by p.id desc;

这给了我变量p undefined'。

我知道,如果我放弃顺序,那么不同的作品会给我(a)一次。

但是我怎样才能在同一时间处理不同的秩序?

1 个答案:

答案 0 :(得分:1)

请考虑您的查询无效的原因:

如果没有不同的,则每行都有u和p的行。当你使用DISTINCT时,如果同一个u有多行,匹配多个p,它应该如何排序?那是一项不可能完成的任务。

如果你把它改成u.id的顺序,那么它就可以了。

顺便说一句,我建议您使用标签将查询限制为仅限于相关节点。您还可以重新编写查询,以防止它发出重复项,并完全避免使用DISTINCT。

如果我们假设您感兴趣的节点标有:Person,则您的查询可能是:

MATCH (p:Person)
WHERE EXISTS( (p)-[:likes]-() )
RETURN p ORDER BY p.id DESC