基于与节点的单一关系的Neo4j计数

基于与节点的单一关系的Neo4j计数,neo4j,cypher,Neo4j,Cypher,我想找到所有参与所有指定电影的人,例如在两部电影中:《终结者》、《真实的谎言》 我有以下疑问: MATCH (t:Title)-[:ACTS_IN]-(p:Principal)-[:ACTS_BY]->(n:Name) WHERE t.originalTitle IN ["The Terminator", "True Lies"] WITH n, collect(n) as names WHERE SIZE(names) >= 2 RETURN n.primaryName

我想找到所有参与所有指定电影的人,例如在两部电影中:《终结者》、《真实的谎言》

我有以下疑问:

MATCH (t:Title)-[:ACTS_IN]-(p:Principal)-[:ACTS_BY]->(n:Name) 
WHERE t.originalTitle IN ["The Terminator", "True Lies"] 
WITH n, collect(n) as names 
WHERE SIZE(names) >= 2 
RETURN n.primaryName
如果每个人在每部电影中只参与一次(
:通过关系扮演),这一点很好。但根据我的数据库模式设计,每个人都可以在主体节点和名称节点之间建立0-N
:ACTS\u关系(例如,同一个人可以同时成为电影的制片人和演员)

问题是,如果某人在一部电影中参与了2次以上,在另一部电影中参与了0次,那么上述密码查询也将返回person(
Name
节点),但如果此人参与了每部电影,我只需要返回
Name
节点


请帮助改进查询以实现它。

要解决此问题,您需要获得不同的值
t,p,n
以清除重复项,然后进行计数:

MATCH (t:Title)-[:ACTS_IN]-(p:Principal)-[:ACTS_BY]->(n:Name) 
WHERE t.originalTitle IN ["The Terminator", "True Lies"] 
WITH DISTINCT t, p, n
WITH n, count(n) as occurrences 
WHERE occurrences >= 2 
RETURN n.primaryName

谢谢你的回答。在[“终结者”,“某个古怪的名字”]中出现以下情况时,它仍然返回
James Cameron
但是我在数据库中没有电影
一些奇怪的名字,在这种情况下,我希望结果是空的。我想这是因为詹姆斯·卡梅隆
的4个不同的
p
导致的,下面的查询返回
匹配(t:Title)-[:ACTS\u in]-(p:Principal)-[:ACTS\u BY]->(n:NAME)其中t.originalttle[“终结者”]和n.primaryName=“James Cameron”返回不同的p
如何在查询中正确考虑
(t:Title)
(n:Name)的唯一1
(p:Principal)
pair?我在下面遇到了一点问题,你能添加密码重新创建图表的相关部分吗?这样我就可以运行一些测试了?谢谢,我想我发现了问题!我在数据库中有不止一个“终结者”条目…像电影、视频游戏等等