Neo4j 带遍历的分组和排序
我有两种类型的节点:城市和事件 城市可以举办许多活动,每个活动仅由一个城市主办 可以使用链接关系在它们之间链接事件(可以链接事件) 我想找到一个给定的城市,在这个城市主办的活动按链接事件分组 例如:Neo4j 带遍历的分组和排序,neo4j,Neo4j,我有两种类型的节点:城市和事件 城市可以举办许多活动,每个活动仅由一个城市主办 可以使用链接关系在它们之间链接事件(可以链接事件) 我想找到一个给定的城市,在这个城市主办的活动按链接事件分组 例如: Events happened in C1 : E1, E2, E3, E4 Events happened in C2 : Ew, Ex, Ey, Ez Events happened in C3 : Ea, Eb, Ec, Ed 链接: E1 -> Ew -> Ea -> E
Events happened in C1 : E1, E2, E3, E4
Events happened in C2 : Ew, Ex, Ey, Ez
Events happened in C3 : Ea, Eb, Ec, Ed
链接:
E1 -> Ew -> Ea -> E2 -> Ex -> Ey
E3 -> Eb -> E4 -> Ez -> Ec -> Ed
我正在寻找返回的方法:
for C1 : [E1,E2], [E3,E4]
or for C2 : [Ew,Ex,Ey], [Ez]
or for C3 : [Eb,Ec,Ed], [Ea]
这可以通过遍历完成吗?设置示例数据集:
MERGE (E1:Event { id: "E1" })
MERGE (E2:Event { id: "E2" })
MERGE (E3:Event { id: "E3" })
MERGE (E4:Event { id: "E4" })
MERGE (Ew:Event { id: "Ew" })
MERGE (Ex:Event { id: "Ex" })
MERGE (Ey:Event { id: "Ey" })
MERGE (Ez:Event { id: "Ez" })
MERGE (Ea:Event { id: "Ea" })
MERGE (Eb:Event { id: "Eb" })
MERGE (Ec:Event { id: "Ec" })
MERGE (Ed:Event { id: "Ed" })
MERGE (C1:Location { city: "C1" })
MERGE (C2:Location { city: "C2" })
MERGE (C3:Location { city: "C3" })
MERGE (C1)<-[:HAPPENED_IN]-(E1)
MERGE (C1)<-[:HAPPENED_IN]-(E2)
MERGE (C1)<-[:HAPPENED_IN]-(E3)
MERGE (C1)<-[:HAPPENED_IN]-(E4)
MERGE (C2)<-[:HAPPENED_IN]-(Ew)
MERGE (C2)<-[:HAPPENED_IN]-(Ex)
MERGE (C2)<-[:HAPPENED_IN]-(Ey)
MERGE (C2)<-[:HAPPENED_IN]-(Ez)
MERGE (C3)<-[:HAPPENED_IN]-(Ea)
MERGE (C3)<-[:HAPPENED_IN]-(Eb)
MERGE (C3)<-[:HAPPENED_IN]-(Ec)
MERGE (C3)<-[:HAPPENED_IN]-(Ed)
CREATE (E1)-[:LINKED]->(Ew)-[:LINKED]->(Ea)
CREATE (Ea)-[:LINKED]->(E2)-[:LINKED]->(Ex)-[:LINKED]->(Ey)
CREATE (E3)-[:LINKED]->(Eb)-[:LINKED]->(E4)
CREATE (E4)-[:LINKED]->(Ez)-[:LINKED]->(Ec)-[:LINKED]->(Ed)
C2的结果:
+------------------+
| events |
+------------------+
| ["Ew","Ex","Ey"] |
| ["Ez"] |
+------------------+
2 rows
37 ms
C3的结果:
+------------------+
| events |
+------------------+
| ["Ea"] |
| ["Eb","Ec","Ed"] |
+------------------+
2 rows
38 ms
也许您可以添加一个可视化的图形模型?一般来说,如果您想从Java API开始,只需使用node.getRelationships()等基本方法,然后从那里开始 你会怎么做
谢谢Kenny的回答,但我希望使用Traversal API来实现。我已经做了一些类似于您的解决方案的工作。它工作得非常完美,但对于大量节点的性能不是很好。
+------------------+
| events |
+------------------+
| ["Ew","Ex","Ey"] |
| ["Ez"] |
+------------------+
2 rows
37 ms
+------------------+
| events |
+------------------+
| ["Ea"] |
| ["Eb","Ec","Ed"] |
+------------------+
2 rows
38 ms