2016-09-28 14 views
0

以我在Neo4j的第一個步驟 - 有什麼東西我不完全得到(可能涉及到語法)Neo4j的引入關係變量的影響在多跳結果關係

爲什麼會出現這種結果返回

MATCH (d:People)-[HAS_VEHICLE*]->(v:Vehicle) return d, v

雖然這並不返回任何結果

MATCH (d:People)-[r:HAS_VEHICLE*]->(v:Vehicle) return d, v

它們之間的差異是關係變量的引入 - 但爲什麼會影響查詢是返回結果還是根本沒有結果?

回答

4

實際上,這兩個查詢之間的區別在於第一個查詢沒有指定關係類型。相反,第一個查詢將HAS_VEHICLE指定爲標識符

關係類型必須以冒號開頭。所以,你的第一個查詢應該是:

MATCH (d:People)-[:HAS_VEHICLE*]->(v:Vehicle) return d, v 

將帖子

上面的查詢也應該返回任何結果,這意味着在你的數據庫匹配指定的模式,沒有路徑。例如,要匹配上述模式,所有關係必須是HAS_VEHICLE類型。

您可以修改查詢不需要HAS_VEHICLE類型,並沿着匹配導致新模式的路徑返回實際的關係類型:

MATCH (d:People)-[rels*]->(v:Vehicle) 
RETURN d, EXTRACT(r IN rels | TYPE(r)) AS types, v; 
+0

確定。謝謝。所以現在我沒有得到任何結果。這是否意味着調整後的上述查詢不適用於檢索與人'(人) - >(電影) - >(車輛)'相距2跳的車輛? – tamersalama

+0

不,這意味着您的數據庫中沒有與指定模式匹配的路徑。例如,要匹配上述模式,所有關係必須是'HAS_VEHICLE'類型。我會在我的答案中添加更多信息。 – cybersam