前言:
這篇本章通過 neo4j 官方給出的 movie graph 例子學習 neo4j 基本的創建、查詢、修改、刪除語句。
一、創建圖譜
1. 獲取 Example Graph - Movie Graph 實例
2. 導入官網的圖譜創建語句
下面展示了電影 "The Matrix" 的人物信息與關系:
1 // create the profiles of actors 2 CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'}) 3 CREATE (Keanu:Person {name:'Keanu Reeves', born:1964}) 4 CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967}) 5 CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961}) 6 CREATE (Hugo:Person {name:'Hugo Weaving', born:1960}) 7 CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967}) 8 CREATE (LanaW:Person {name:'Lana Wachowski', born:1965}) 9 CREATE (JoelS:Person {name:'Joel Silver', born:1952}) 10 11 //create the relationships between the roles and actors 12 CREATE 13 (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix), 14 (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix), 15 (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix), 16 (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix), 17 (LillyW)-[:DIRECTED]->(TheMatrix), 18 (LanaW)-[:DIRECTED]->(TheMatrix), 19 (JoelS)-[:PRODUCED]->(TheMatrix) 20 21 CREATE (Emil:Person {name:"Emil Eifrem", born:1978}) 22 CREATE (Emil)-[:ACTED_IN {roles:["Emil"]}]->(TheMatrix)
導入成功!
湯姆·漢克斯參演的電影
二、查詢語句
1. 按名字查找某個實體
eg1: Find the actor named "Tom Hanks"...
neo4j $ MATCH (tom {name: "Tom Hanks"}) RETURN tom
eg2: Find the movie with title "Cloud Atlas"...
neo4j $ MATCH (cloudAtlas {title: "Cloud Atlas"}) RETURN cloudAtlas
2. 使用 limit 關鍵字限制查詢實體個數
eg: Find 10 people...
neo4j $ MATCH (people:Person) RETURN people.name LIMIT 10
3. 使用 where 條件查詢語句
eg: Find movies released in the 1990s...
neo4j $ MATCH (nineties:Movie)
WHERE nineties.released >= 1990 AND nineties.released < 2000
RETURN nineties.title
4. 已知一節點和關系查找另一節點信息
eg1: List all Tom Hanks movies...
neo4j $ MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies)
RETURN tom,tomHanksMovies
eg2: Who directed "Cloud Atlas"?
neo4j $ MATCH (directors)-[:DIRECTED]->(cloudAtlas {title: "Cloud Atlas"})
RETURN directors.name
or
neo4j $ MATCH (cloudAtlas {title: "Cloud Atlas"})<-[:DIRECTED]-(directors)
RETURN directors.name
5. 查詢某個節點上以同樣關系連接的節點信息
eg: Tom Hanks' co-actors...
neo4j $ MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors)
RETURN coActors.name
6. 查詢與某結點有關系的所有結點信息
eg: How people are related to "Cloud Atlas"...
neo4j $ MATCH (people:Person)-[relatedTo]-(:Movie {title: "Cloud Atlas"})
RETURN people.name, Type(relatedTo), relatedTo
7. 查找兩個節點的最短路徑(不論任何關系)
eg: Bacon path, the shortest path of any relationships to Meg Ryan
neo4j $ MATCH p=shortestPath( (bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"}))
RETURN p
8. 查詢兩個結點的中介結點信息
eg: Find someone to introduce Tom Hanks to Tom Cruise
neo4j $ MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors), (coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cruise:Person {name:"Tom Cruise"}) RETURN tom, m, coActors, m2, cruise
9. 刪除所有結點及關系
neo4j $ MATCH (n) DETACH DELETE n or
neo4j $ MATCH (n)-[m] DELETE n, m
三、總結
1. 查詢一般格式:(keyword 、variable 、 entity or relationship)
MATCH (sub:subject)-[pre:predicate]->(obj:object) RETURN sub, pre, obj
2. 如果是單向關系需要注意箭頭方向