根据这个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
答案 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
节点会得到一行结果。