使用 NEO4j 显示具有多个关系的节点

pr3*_*338 1 relationship nodes neo4j graph-databases cypher

我使用以下代码创建了一个图表。我如何不仅返回节点,还返回每个用户连接到多个视频的时间和地点以及每个视频连接到多个用户的关系?

CREATE CONSTRAINT ON (u:User) ASSERT u.user IS UNIQUE;
CREATE CONSTRAINT ON (v:Video) ASSERT v.video IS UNIQUE;

USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
WITH distinct line.user as user_data
MERGE (:User {user: user_data });

USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
WITH distinct line.video as video_data
MERGE (:Video {video: video_data });

USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
MATCH (u:User {user: line.user })
MATCH (v:Video {video: line.video})
MERGE (u)-[:VIEW]->(v);
Run Code Online (Sandbox Code Playgroud)

Lua*_*nne 5

根据更新的问题进行编辑- 获取连接到多个视频的用户的节点和关系:

MATCH (u:User)-[r:VIEW]->(:Video)
WITH u, count(r) AS count
WHERE count > 1
MATCH (u)-[r:VIEW]->(v:Video)
RETURN u,r,v;
Run Code Online (Sandbox Code Playgroud)

要获取连接到多个用户的视频的节点和关系:

MATCH (:User)-[r:VIEW]->(v:Video)
WITH v, count(r) AS count
WHERE count > 1
MATCH (u:User)-[r:VIEW]->(v)
RETURN u,r,v;
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下,由于您还需要关系,因此您将为每个 u,r,v 获得一行。如果您不想要关系,则可以收集所有视频,例如:

   MATCH (u:User)-[r:VIEW]->(:Video)
   WITH u, count(r) AS count
   WHERE count > 1
   MATCH (u)-[r:VIEW]->(v:Video)
   RETURN u,collect(v);
Run Code Online (Sandbox Code Playgroud)

最后,要获取观看过多个视频的用户,其中视频已被多个用户观看:

MATCH (u:User)-[r:VIEW]->(:Video)
WITH u, count(r) AS count
WHERE count > 1
MATCH (u)-[r:VIEW]->(v:Video)<-[r2:VIEW]-(other:User)
RETURN u,r,v,collect(other);
Run Code Online (Sandbox Code Playgroud)