簡體   English   中英

使用cypherquery在neo4j中僅查找具有多個傳入關系的節點

[英]Finding only nodes that have more than one incoming relationship in neo4j using cypherquery

我有一個neo4j數據庫,用於學習這種新的有向圖技術,並且我按照這種結構制作了節點

(n:NewsArticle) -[r:about_place]-> (l:Location)

現在我想要的是稍微復雜/令人費解的(或者我似乎認為是這樣),並且對於cypher還是陌生的,我無法用這種新語法完全表達自己。 請多多包涵。

基本上我有很多地方標記的文章。 現在,對於給定的一天,我發現所有帶有特定位置標記的文章。 一旦有了它們,現在針對那些文章,我想找出它們所標記的其他位置。

這段代碼似乎可以滿足我的要求。 (yaay)

MATCH (n:NewsArticle{date:"Jun-30-2015"})-[]->(l:Location{name:"India"})
MATCH (n:NewsArticle)-[r:about_place]->(m:Location)
return n,m

至此,我最終獲得了8個位置和132個新聞文章。

現在到棘手的部分。 我擁有about_place關系的132篇文章中的大多數都指向8個位置中的只有1個,我不希望這樣。 我想在此集合中找到與我發現的至少兩個位置相關的文章。

我想出了這個查詢,

MATCH (n:NewsArticle{date:"Jun-30-2015"})-[]->(l:Location{name:"India"})
MATCH (n:NewsArticle)-[r:about_place]->(m:Location)
WITH m, count(r) as rel_cnt
WHERE rel_cnt > 2
MATCH (a:NewsArticle{date:"Jun-30-2015"})-[r:about_place]->(m:Location)
return a,m

它的確給了我一些結果,但沒有滿足我的要求。 但是,如果我將a更改為n (以引用前2個match語句),盡管我覺得那應該成為我想要的結果,但它變成了語法錯誤。

tl; dr我不想看到只有一個新聞文章指向它們的位置節點

此查詢應返回所有具有date屬性為“ Jun-30-2015”的NewsArticle節點,這些節點與Location India和至少一個其他位置具有:about_place關系:

MATCH (n:NewsArticle {date:"Jun-30-2015"})-[:about_place]->(:Location {name: "India"})
MATCH (n)-[r:about_place]->(l:Location)
WITH collect(n) AS articles, l, count(r) AS num WHERE num > 2
RETURN l, articles, num

嘗試:

MATCH (n:NewsArticle {date:"Jun-30-2015"})-[:about_place]->(:Location {name: "India"})
MATCH (n)-[r:about_place]->(l:Location)
WITH n, count(r) as num 
WHERE num > 2
MATCH (n)-[:about_place]->(l:Location)
RETURN n, l

您可能要從結果中排除原始位置,因為您需要在最終的RETURN之前添加其他過濾器。

找到答案為collect()語句,該語句使您可以通過WITH管道攜帶變量。

MATCH (n:NewsArticle{date:"Jun-30-2015"})-[:about_place]->(l:Location{name:"India"})
MATCH (n:NewsArticle)-[r:about_place]->(loc:Location)
WITH loc,collect(n) as article, count(r) as num WHERE num > 2
RETURN loc,article

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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