Cypher使用match子句查詢數據,是Cypher最基本的查詢子句。在查詢數據時,使用Match子句指定搜索的模式,這是從Neo4j數據庫查詢數據的最主要的方法。match子句以後一般會跟着where子句,向模式中添加過濾性的謂詞,用於對數據進行過濾。在查詢數據時,查詢語句分爲多個部分,with子句用於對上一個查詢部分的結果進行處理,以輸出到下一個查詢部分。數據庫
對節點進行查詢,是查詢graph的基本操做,節點具備標籤和屬性,Match查詢不只可以按照標籤對節點進行查詢,還能按照屬性對節點進行查詢。 當沒有指定節點的標籤或屬性時,默認是選擇節點所有的標籤和屬性。函數
1,查詢全部節點spa
僅僅指定一個節點的模式,沒有標籤(Lable)和屬性,表示查詢全部的節點:code
MATCH (n)
RETURN n
2,查詢帶有特定標籤的節點blog
當模式中指定標籤時,表示只查詢帶有特定標籤的節點,有多個標籤的節點,只要含有指定的標籤,就成功匹配,綁定該節點。ip
MATCH (movie:Movie)
RETURN movie.title
3,查詢相關的任意節點文檔
指定一個節點,節點的name屬性是'Oliver Stone',查詢跟該節點相關的其餘節點:get
MATCH (director { name: 'Oliver Stone' })--(movie) RETURN movie.title
4,查詢相關的特定節點it
指定一個節點,查詢跟節點相關的節點,並指定相關節點的標籤io
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
參考文檔: