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

Show nodes with more than one relationship using NEO4j

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

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);

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

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;

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

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;

请注意,在这两种情况下,由于您也需要关系,因此每个 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);

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

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);

要列出被多次查看的节点,此查询(与您的查询几乎相同)应该有效:

MATCH ()-[r:VIEW]->(h)
WITH h, COUNT(r) as rel_cnt
WHERE rel_cnt > 1
RETURN h;

您的查询从未定义 r 变量,并且会产生错误。