Cypher使用match子句查詢數據,是Cypher最基本的查詢子句。在查詢數據時,使用Match子句指定搜索的模式,這是從Neo4j數據庫查詢數據的最主要的方法。match子句之后通常會跟着where子句,向模式中添加過濾性的謂詞,用於對數據進行過濾。在查詢數據時,查詢語句分為多個部分,with子句用於對上一個查詢部分的結果進行處理,以輸出到下一個查詢部分。
一,節點查詢
對節點進行查詢,是查詢graph的基本操作,節點具有標簽和屬性,Match查詢不僅能夠按照標簽對節點進行查詢,還能按照屬性對節點進行查詢。 當沒有指定節點的標簽或屬性時,默認是選擇節點全部的標簽和屬性。
1,查詢所有節點
僅僅指定一個節點的模式,沒有標簽(Lable)和屬性,表示查詢所有的節點:
MATCH (n)
RETURN n
2,查詢帶有特定標簽的節點
當模式中指定標簽時,表示只查詢帶有特定標簽的節點,有多個標簽的節點,只要含有指定的標簽,就成功匹配,綁定該節點。
MATCH (movie:Movie)
RETURN movie.title
3,查詢相關的任意節點
指定一個節點,節點的name屬性是'Oliver Stone',查詢跟該節點相關的其他節點:
MATCH (director { name: 'Oliver Stone' })--(movie) RETURN movie.title
4,查詢相關的特定節點
指定一個節點,查詢跟節點相關的節點,並指定相關節點的標簽
MATCH (:Person { name: 'Oliver Stone' })--(movie:Movie) RETURN movie.title
二,基本關系的查詢
對關系進行查詢,關系的模式是由兩個節點來決定的。
1,指定關系的方向來查詢節點
對於標簽是Person,並且name屬性是'Oliver Stone'的節點,該節點指向另外一個節點movie:
MATCH (:Person { name: 'Oliver Stone' })-->(movie) RETURN movie.title
2,查詢關系的類型
在查詢關系時,可以在match子句中指定關系變量,后續子句可以引用該變量,例如,使用type()函數查看關系的類型:
MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie) RETURN type(r)
3,匹配關系類型
在匹配關系時,可以指定關系的類型
MATCH (wallstreet:Movie { title: 'Wall Street' })<-[:ACTED_IN]-(actor) RETURN actor.name
3,匹配多種關系類型
在匹配關系時,可以指定多種關系的類型,只需要匹配其中任意一個關系類型就匹配成功
MATCH (wallstreet { title: 'Wall Street' })<-[:ACTED_IN|:DIRECTED]-(person) RETURN person.name
4,匹配關系類型,並指定關系變量
MATCH (wallstreet { title: 'Wall Street' })<-[r:ACTED_IN]-(actor) RETURN r.role
5,匹配多個關系
MATCH (charlie { name: 'Charlie Sheen' })-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director) RETURN movie.title, director.name
三,匹配路徑
路徑是節點和關系交替組合構成的序列,圖中必須滿足路徑指定的模式,才能返回路徑中的元素。
1,對變長路徑的查詢
MATCH (martin { name: 'Charlie Sheen' })-[:ACTED_IN*1..3]-(movie:Movie) RETURN movie.title
2,路徑變量
MATCH p =(actor { name: 'Charlie Sheen' })-[:ACTED_IN*2]-(co_actor) RETURN relationships(p),p
3,根據路徑的屬性進行匹配
MATCH p =(charlie:Person)-[* { blocked:false }]-(martin:Person) WHERE charlie.name = 'Charlie Sheen' AND martin.name = 'Martin Sheen' RETURN p
參考文檔: