2014-02-13 82 views
3

在此圖中,我想查找所有灰色節點以紅色圓圈爲圓圈,而不是其他任何灰色節點。也就是說,所有節點的標籤爲:OTHER,它們是A和C之間路徑上節點的子節點。NB A和C之間的路徑可能比此處顯示的3個節點長。在路徑中的每個節點上的密碼子查詢

enter image description here

所以我想要做的就是得到一個路徑p = A ... C和子查詢中的路徑每個節點 - [:HAS] - >(N:除外)的關係。

但是我堅持在子查詢上,因爲它不是在初始查詢的結果集上操作,而是在所有節點上操作。

所以這給了我所有的灰色節點:(不只是紅色泡沫的人。請幫助

match p=(n:MAIN)-[:EXTENDS*]->(m:MAIN) 
where n.name = 'A' AND m.name='C' 
WITH nodes(p) AS collection 
match (l:MAIN)-[:HAS]->(u:OTHER) return u; //This last part is my subquery 

回答

9

的問題是什麼在你的子查詢的「MATCH」使用節點從結果。第一查詢

可以明確指定所期望的路徑中的節點 - 具有標識符(例如,「中間」)B,然後在你的子查詢的匹配模式中使用它,

MATCH p=(n:MAIN)-[:EXTENDS*0..]->(middle:MAIN)-[:EXTENDS*0..]->(m:MAIN) 
WHERE n.name = 'A' AND m.name='C' 
WITH middle 
MATCH (middle:MAIN)-[:HAS]->(u:OTHER) 
RETURN u 
+0

謝謝Lisa帽子的作品。看看你的答案爲什麼我不能在我的查詢(match(collection:MAIN) - [:HAS]) - >(u:OTHER)中使用「collection」來代替「l」),就像你在你的中間使用過的那樣。這樣做給了我一個例外...集合已經定義爲衝突類型集合

+1

查詢中的標識符「集合」的類型爲「集合」,但Cypher解析器期望該模式中的標識符的類型爲「節點「而不是」集合「。這就是爲什麼它給出了衝突類型的錯誤信息。 –

相關問題