2015-03-18 64 views
1

我正在使用附帶Neo4j安裝的示例電影圖。在Neo4j中匹配有和沒有關係的節點

我想得到一個演員(名字),他在電影和所有其他電影(他還沒有連接到)中扮演的角色。

我能得到的最接近的是類似於以下內容的內容,但演員,角色和已執行影片的重複次數與其他影片重複次數一樣多。

MATCH (actor{name:'Bill Paxton'})-[roles:ACTED_IN]->(actedInMovies), (otherMovies:Movie) 
WHERE NOT (actor)-[:ACTED_IN]->(otherMovies) 
RETURN actor, roles, actedInMovies, otherMovies 

我該如何爲演員,相應電影的角色以及所有其他電影只獲取一個結果?

在此先感謝!

回答

1

稍微不同的方法怎麼樣首先得到比爾帕克斯頓演過的所有電影,然後用該電影集合找到所有不在其中的電影。然後回到比爾·帕克斯頓,他演過電影的收集和電影,他並沒有採取行動的集合(即剩餘)

MATCH (actor:Person {name:'Bill Paxton'})-[r:ACTED_IN]->(acted:Movie) 
with actor, collect(acted) as acted_in_movies, collect(r) as roles 
MATCH (other:Movie) 
WHERE none (acted in acted_in_movies where acted = other) 
RETURN actor.name, acted_in_movies, roles, collect(other) as other_movies 

更新查詢,以反映我測試了它的數據集。添加角色名稱的集合並將電影節點更改爲結果集的標題。

MATCH (actor {name:'Bill Paxton'})-[r:ACTS_IN]->(acted) 
with actor, collect(acted) as acted_in_movies, collect(acted.title) as acted_titles, collect(r.name) as roles 
MATCH (other:Movie) 
WHERE none (acted in acted_in_movies where acted = other) 
RETURN actor.name, acted_titles, roles, collect(other.title) as other_movies 
+0

我得到0行與該查詢? – 2015-03-19 19:16:16

+0

不是,它確實是ACTED_IN – 2015-03-19 19:38:17

+0

嗯,0行還有 – 2015-03-19 23:40:55

相關問題