我试图返回一组节点,其中有超过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
答案 0 :(得分:0)
如果您的查询值SIZE()
始终为 0 或 1 (除非任何一对{{ 1}}和Person
)。这样做的原因是您的查询是在CreativeWork
和SIZE
上汇总Count
(或Person
)。(两者均与Group by相同)
您可以使用以下查询,其中每个CreativeWork
COUNTS
CreativeWorks
(此查询返回CreativeWork for Person的列表。
):
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
注意:列表中最后一个标题的末尾有一个空格(在 您的查询)。
答案 1 :(得分:0)
@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