Neo4j 寻找共同关系的有效途径

Neo4j 寻找共同关系的有效途径,neo4j,cypher,Neo4j,Cypher,我最近开始学习密码。我有一个包含四个用户和电影的数据库。用户可以与电影建立[:观看]/[:观看列表]/[:喜爱]关系 我想要四个用户都看过的电影。我写了一个有效的查询: match (u1)-[:WATCHED]->(f)<-[:WATCHED]-(u2), (u3)-[:WATCHED]->(f)<-[:WATCHED]-(u4) return u1, u2, u3, u4, f match(u1)-[:WATCHED]->(f)(f)您可以使用all: 这将检查谓

我最近开始学习密码。我有一个包含四个用户和电影的数据库。用户可以与电影建立
[:观看]/[:观看列表]/[:喜爱]
关系

我想要四个用户都看过的电影。我写了一个有效的查询:

match (u1)-[:WATCHED]->(f)<-[:WATCHED]-(u2),
(u3)-[:WATCHED]->(f)<-[:WATCHED]-(u4)
return u1, u2, u3, u4, f

match(u1)-[:WATCHED]->(f)(f)您可以使用
all


这将检查谓词是否适用于所有元素。

您可以使用
all


这将检查谓词是否适用于所有元素。

您可以这样做,例如:

MATCH (f:Film)
WHERE size((f)<-[:WATCHED]-()) = 4
RETURN f, [(f)<-[:WATCHED]-(u:User) | u] as watchers
匹配(f:胶片)

其中size((f)可以执行此操作,例如:

MATCH (f:Film)
WHERE size((f)<-[:WATCHED]-()) = 4
RETURN f, [(f)<-[:WATCHED]-(u:User) | u] as watchers
匹配(f:胶片)

其中,size((f)为了避免对
用户
节点计数进行硬编码,此查询使用数据库的内部统计信息有效地获取计数:

MATCH (u:User)
WITH COUNT(u) AS userCount
MATCH (f:Film)
WHERE SIZE((f)<-[:WATCHED]-()) = userCount
RETURN f;
匹配(u:用户)
使用COUNT(u)作为userCount
比赛(f:电影)

其中,SIZE((f)为了避免对
用户
节点计数进行硬编码,此查询使用数据库的内部统计信息有效地获取计数:

MATCH (u:User)
WITH COUNT(u) AS userCount
MATCH (f:Film)
WHERE SIZE((f)<-[:WATCHED]-()) = userCount
RETURN f;
匹配(u:用户)
使用COUNT(u)作为userCount
比赛(f:电影)
其中尺寸((f)