1.節(jié)點(diǎn)創(chuàng)建
# 創(chuàng)建一個(gè)Label為Person的節(jié)點(diǎn),且該階段有屬性 name,from,klout
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
2.查詢數(shù)據(jù)
# 從 Label 為 Person 的數(shù)據(jù)中,找到一條數(shù)據(jù),過(guò)濾條件 name = "Emil"
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
3.創(chuàng)建更多數(shù)據(jù)
# 首先,從 Label 為 Person 的數(shù)據(jù)中過(guò)濾出name = "Emil"的數(shù)據(jù)
# 然后,創(chuàng)建多條Label為Person的數(shù)據(jù)
# 接著,創(chuàng)建每條節(jié)點(diǎn)數(shù)據(jù)間的關(guān)系 KNOWS
MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)
4.通過(guò)關(guān)系找數(shù)據(jù)
#查找所有與name = "Emil"這條數(shù)據(jù)有 KNOWS關(guān)系的數(shù)據(jù)a
MATCH (ee:Person)-[:KNOWS]-(a) WHERE ee.name = "Emil" RETURN ee, a
5.通過(guò)節(jié)點(diǎn)屬性找數(shù)據(jù)
# 首先,查找一條數(shù)據(jù) Label為Person,name = "Johan"
# 然后,查詢與它間隔一個(gè)節(jié)點(diǎn)的數(shù)據(jù),且之間的關(guān)系需是 KNOWS,并且忽視關(guān)系方向
# 最后,需要查找的節(jié)點(diǎn)數(shù)據(jù)的屬性 hobby = "surfing"
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer
6.間隔節(jié)點(diǎn)找數(shù)據(jù)
# 查找與數(shù)據(jù)name='Johan' 間隔一個(gè)節(jié)點(diǎn)的所有數(shù)據(jù)節(jié)點(diǎn)
match (a:Person)-[:KNOWS]-()-[:KNOWS]-(b) where a.name='Johan' return b
7.根據(jù)不同條件過(guò)濾數(shù)據(jù)
# 查找所有name: "Tom Hanks"的數(shù)據(jù),任何Label
MATCH (tom {name: "Tom Hanks"}) RETURN tom
# 查找 title: "Cloud Atlas" 的所有數(shù)據(jù)
MATCH (cloudAtlas {title: "Cloud Atlas"}) RETURN cloudAtlas
# 查找所有 Label 為 Person 的數(shù)據(jù),返回其name 屬性,并限定10條
MATCH (people:Person) RETURN people.name LIMIT 10
# 匹配所有 Label 為 Person 的數(shù)據(jù),過(guò)濾出 released >= 1990 AND released < 2000,并且返回字段 title
MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties.title
# 找尋 Tom Hanks 出演的所有電影
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies
# 找尋所有出演 Cloud Atlas 電影的演員的名字
MATCH (cloudAtlas {title: "Cloud Atlas"})<-[:DIRECTED]-(directors) RETURN directors.name
# 找尋與 Tom Hanks 一起合作過(guò)電影的演員名稱
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) RETURN coActors.name
#找尋與電影Cloud Atlas有關(guān)系的所有人,返回人名,關(guān)系類型
MATCH (people:Person)-[relatedTo]-(:Movie {title: "Cloud Atlas"}) RETURN people.name, Type(relatedTo), relatedTo
# 找尋 Label 為 Person,名字為Kevin Bacon,所有1-4層的所有數(shù)據(jù)
MATCH (bacon:Person {name:"Kevin Bacon"})-[*1..4]-(hollywood)
RETURN DISTINCT hollywood
# 找尋 name:"Kevin Bacon"和name:"Kevin Bacon" 這兩個(gè)人之間的最短路徑
MATCH p=shortestPath(
(bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})
)
RETURN p
# 找尋 Tom Hanks合作過(guò)的演員a,演員 a合作過(guò)的演員b,演員b中未與 Tom Hanks合作過(guò)的演員
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
(coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cocoActors)
WHERE NOT (tom)-[:ACTED_IN]->()<-[:ACTED_IN]-(cocoActors) AND tom <> cocoActors
RETURN cocoActors.name AS Recommended, count(*) AS Strength ORDER BY Strength DESC
# 與Tom Hanks一同演過(guò)電影的演員a,與演員a一同演過(guò)電影的名為Tom Cruise
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
8.匹配所有數(shù)據(jù)
MATCH (n) RETURN n
9.刪除所有數(shù)據(jù)
# 刪除所有節(jié)點(diǎn)與關(guān)系的數(shù)據(jù)
MATCH (n) DETACH DELETE n
10.創(chuàng)建索引
#創(chuàng)建索引,主要為了提高查詢性能
CREATE INDEX ON :Product(productID)
11.索引字段關(guān)聯(lián)創(chuàng)建關(guān)系
#索引字段相當(dāng)于外鍵,通過(guò)外鍵關(guān)聯(lián),創(chuàng)建有指向性的關(guān)系
MATCH (p:Product),(c:Category) WHERE p.categoryID = c.categoryID CREATE (p)-[:PART_OF]->(c)
12.返回?cái)?shù)據(jù)可使用函數(shù)
#找尋 Label為Supplier/Category,關(guān)系為Product,方向?yàn)镾upplier->Category的數(shù)據(jù),返回companyName ,以及categoryName,并將categoryName轉(zhuǎn)換為數(shù)組結(jié)構(gòu)
MATCH (s:Supplier)-->(:Product)-->(c:Category) RETURN s.companyName as Company, collect(distinct c.categoryName) as Categories