给定下图,我们如何获得结果,以便根据给定节点的上一个和下一个节点对它们进行分组。
H->G->E->D
->F
因此,给定 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
您的描述和您的示例并不完全相同,您说“给定节点的上一个和下一个节点”,并且您的示例有下一个和下一个之后的两组
给定以下节点
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)
这是另一个查询