基于与节点的单一关系的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?我在下面遇到了一点问题,你能添加密码重新创建图表的相关部分吗?这样我就可以运行一些测试了?谢谢,我想我发现了问题!我在数据库中有不止一个“终结者”条目…像电影、视频游戏等等