2016-11-18 106 views
0

不知道標題是否可以解釋所有內容,但是我正在使用Neo4j和電影數據庫(從這裏:https://neo4j.com/developer/example-data/)學習Cypher,並且我正在嘗試製作一個查詢,該查詢會爲我提供導演也參與其中。查找具有2個關係的節點

爲了舉一個這樣的電影的例子,低俗小說 - 昆汀塔倫蒂諾既參與和導演電影。

我想出了這個查詢上面的例子:

match (m:Movie)-[:ACTS_IN]-(d:Director)-[:DIRECTED]->(n:Movie) 
where d.name STARTS WITH 'Q' 
return * 

但它似乎不工作我預期的方式。我得到了他所指導和參與的所有電影,而我只想要他所做的兩部電影。

回答

1

您已經有dm聲明,所以您不要再次在第二個MATCH語句中分配標籤。正確的查詢應該是這樣的

MATCH (d:Director)-[:DIRECTED]->(m:Movie) 
WHERE d.name STARTS WITH 'Q'  
MATCH (d)-[:ACTS_IN]->(m) 
RETURN d, collect(m) AS movies 

請注意,根據您最初的問題,我已經修改了return語句也是如此。

+1

您還可以檢查導演是否在電影中扮演謂詞的一部分。而不是第二個MATCH,你可以用你想要存在的模式繼續WHERE子句:AND(d) - [:ACTS_IN] - >(m)' – InverseFalcon

0

哇我只是想通了:

match (d:Director)-[:DIRECTED]->(m:Movie) 
match (d:Director)-[:ACTS_IN]->(m:Movie) 
where d.name STARTS WITH 'Q' 
return * 

我老老實實期待必須使用某種類型的運營商加入了兩個人,但我想我錯了。

+0

您可以在第一個查詢中的where子句中添加一個額外的條件,如'和n = m',但是,是的,僅僅使用同一個變量兩次會更簡單。 –

相關問題