当我尝试映射所有相关实体时,列表中的重复对象

时间:2017-06-17 16:24:16

标签: neo4j spring-data-neo4j

根据这个post,我试图在列表中映射所有相关实体。 我使用相同的查询进入帖子,条件是返回用户列表,但它返回重复对象

MATCH (user:User) WHERE <complex conditions> WITH user, calculatedValue MATCH p=(user)-[r*0..1]-() RETURN user, calculatedValue, nodes(p), rels(p)

这是一个错误吗?我使用SDN 4.2.4.RELEASE和neo4j 3.2.1

1 个答案:

答案 0 :(得分:2)

不是错误。

请记住,Neo4j中的MATCH会找到给定模式的所有匹配项。让我们来看看你的最后一个MATCH:

MATCH p=(user)-[r*0..1]-()

由于您的变量匹配为*0..1,因此总是会返回至少一行,只有user本身(rels(p)为空,nodes(p)只包含user),然后您将为每个连接的节点获取一行(user将始终出现在该行上,并在nodes(p)集合中与另一个连接的节点一起出现)

最后,当您有一个user个节点和n个直接连接的节点时,您将获得n + 1行。您可以在Neo4j浏览器中运行查询,查看表结果,以进行确认。

更好的匹配可能是:

...
OPTIONAL MATCH (user)-[r]-(b)
RETURN user, calculatedValue, collect(r) as rels, collect(b) as connectedNodes

因为我们在所有关系和连接的节点上聚合(而不仅仅是每个路径的关系和节点),所以每个user节点会得到一行结果。