簡體   English   中英

Neo4J查找節點之間的關系數(SIZE)

[英]Neo4J find the the number(SIZE) of relationships between nodes

我試圖返回一組節點,其中有超過n種相同類型的傳出關系。 為特定的用例提供了一組電影,其中演員為其中一部電影做出了貢獻。

我嘗試了COUNTingSIZE多種方法,但無法弄清楚在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()始終為01 (除非在PersonCreativeWork任何對之間存在兩個或多個關系)。 這樣做的原因是您的查詢匯總了PersonCreativeWorkSIZE (或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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM