[英]Neo4J find the the number(SIZE) of relationships between nodes
我试图返回一组节点,其中有超过n种相同类型的传出关系。 为特定的用例提供了一组电影,其中演员为其中一部电影做出了贡献。
我尝试了COUNTing
和SIZE
多种方法,但无法弄清楚在Neo4J中这是否可能
MATCH (cw:CreativeWork) WHERE cw.officialTitle IN ['Antz', 'The Specialist ']
MATCH (p:Person) WHERE SIZE((p)-[:contributedTo]-(cw)) > 1
RETURN p, cw
这将根据:contributedTo
关系,返回指定的两个Creative Works以及为该标题做出贡献的所有人员。 名单中的两个演员都为这两个奖项做出了贡献,而我有兴趣归还这两个。
例如,此查询不返回任何结果:
MATCH (cw:CreativeWork) WHERE cw.officialTitle IN ['Antz', 'The Specialist ']
MATCH (p:Person) WHERE SIZE((p)-[:contributedTo]-(cw)) > 1
RETURN p, cw
如果您的查询值SIZE()
始终为0或1 (除非在Person
和CreativeWork
任何对之间存在两个或多个关系)。 这样做的原因是您的查询汇总了Person
和CreativeWork
的SIZE
(或Count
)。(两者均与Group by相同)
您可以使用以下查询,该查询为每个Person
COUNTS
CreativeWorks
(此查询返回CreativeWork for Person的列表。):
MATCH (cw:CreativeWork) WHERE cw.officialTitle IN ['Antz', 'The Specialist']
MATCH (p:Person)-[:contributedTo]-(cw)
WITH p,count(cw) as rels, collect(cw) as cws
WHERE rels > 1
RETURN p,cws
您可以修改上面的查询,使其看起来很简单,如下所示(两者执行相同):
MATCH (p:Person)-[:contributedTo]-(cw:CreativeWork)
WHERE cw.officialTitle IN ['Antz', 'The Specialist']
WITH p,count(cw) as rels, collect(cw) as cws
WHERE rels > 1
RETURN p,cws
注意:列表中最后一个标题的末尾有一个空格(在您的查询中)。
@Raj的最后一个查询可以简化:
MATCH (p:Person)-[:contributedTo]-(cw:CreativeWork)
WHERE cw.officialTitle IN ['Antz', 'The Specialist']
WITH p, collect(cw) as cws
WHERE SIZE(cws) > 1
RETURN p, cws
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.