按直接关系对 Cypher 查询结果进行分组

问题描述 投票:0回答:1

给定下图,我们如何获得结果,以便根据给定节点的上一个和下一个节点对它们进行分组。

 H->G->E->D
     ->F
  • H 跟随 G
  • 其中 G 跟随 E 和 F。
  • E 跟随 D

因此,给定 G 的某些属性,期望结果的形式为:

[{H}, {G}, {E, F}, {D}]

尝试过:

MATCH (prev:Person)<-[:FOLLOWS *0..]-(p:Person)<-[:FOLLOWS *0..]-(next:Person) WHERE p.name ='G' RETURN collect(prev), p, collect(next) as result
neo4j cypher
1个回答
0
投票

您的描述和您的示例并不完全相同,您说“给定节点的上一个和下一个节点”,并且您的示例有下一个和下一个之后的两组

给定以下节点

create (:Person {name:"H"})-[:FOLLOWS]->(:Person {name:"G"})-[:FOLLOWS]->(:Person {name:"E"})-[:FOLLOWS]->(:Person {name:"D"});
match (g:Person {name:"G"}) merge (g)-[:FOLLOWS]->(:Person {name:"F"})

这是一个可能的查询

match (prev:Person)-[:FOLLOWS]->(p:Person {name:"G"})-[:FOLLOWS]->(next:Person)
optional match (next)-[:FOLLOWS]->(next2:Person)
return collect(distinct prev.name),p.name,collect(distinct next.name),collect(distinct next2.name)

这是另一个查询

© www.soinside.com 2019 - 2024. All rights reserved.