- 查找名為"Cloud Atlas"的電影
match(cloudAtlas {title:"Cloud Atlas"}) return cloudAtlas
- 查找1990年-2000年發(fā)行的電影的名稱(chēng)
match(movies:Movie) where movies.released > 1990 and movies.released <2000 return movies.title
- 查找"Tom"參演過(guò)的電影,返回電影名,tom,關(guān)系
match(ps:Person {name:"Tom"})-[ac:acted_in]->(movie:Movie) return ps,ac,movie.title
- 查找誰(shuí)導(dǎo)演了電影"Cloud Atlas"
match(ps:Person)-[:directed]->(movie:Movie {title:"Cloud Atlas"}) return ps.name
- 查找與"tom"同出演過(guò)電影的人
match(tom:Person {name:"Tom"}) -[:acted_in]->(m:Movie)<-[:acted_in]-[other:Person] return other.name
- 查找與電影"Cloud Atlas"相關(guān)的所有人
match (people:Person) -[relatedTo]-(:Movie {title:"Cloud Atlas"})
return people.name, Type(relatedTo),relatedTo
Type 返回關(guān)系的標(biāo)簽,比如是參演了電影還是導(dǎo)演了電影還是監(jiān)制.而 relatedTo 返回的是關(guān)系的屬性
這里所說(shuō)的標(biāo)簽,就是書(shū)里所說(shuō)的類(lèi)型
執(zhí)行過(guò)程:
首先匹配節(jié)點(diǎn)類(lèi)型為Person類(lèi)型的節(jié)點(diǎn),然后再匹配節(jié)點(diǎn)類(lèi)型為Movie類(lèi)型,且節(jié)點(diǎn)屬性title為Cloud Atlas的電影節(jié)點(diǎn)
最后匹配他們之間的所有關(guān)系,返回的結(jié)果是三列,對(duì)應(yīng)返回的字段
╒══════════════════╤═════════════════╤══════════════════════════════════════════════════════════════════════╕
│"people.name" │"Type(relatedTo)"│"relatedTo" │
╞══════════════════╪═════════════════╪══════════════════════════════════════════════════════════════════════╡
│"Jessica Thompson"│"REVIEWED" │{"summary":"An amazing journey","rating":95} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Jim Broadbent" │"ACTED_IN" │{"roles":["Vyvyan Ayrs","Captain Molyneux","Timothy Cavendish"]} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Halle Berry" │"ACTED_IN" │{"roles":["Luisa Rey","Jocasta Ayrs","Ovid","Meronym"]} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Lilly Wachowski" │"DIRECTED" │{} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Tom Tykwer" │"DIRECTED" │{} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Hugo Weaving" │"ACTED_IN" │{"roles":["Bill Smoke","Haskell Moore","Tadeusz Kesselring","Nurse Noa│
│ │ │kes","Boardman Mephi","Old Georgie"]} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Tom Hanks" │"ACTED_IN" │{"roles":["Zachry","Dr. Henry Goose","Isaac Sachs","Dermot Hoggins"]} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"David Mitchell" │"WROTE" │{} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Lana Wachowski" │"DIRECTED" │{} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Stefan Arndt" │"PRODUCED" │{} │
└──────────────────┴─────────────────┴──────────────────────────────────────────────────────────────────────┘
- 查找與演員"Kevin Bacon" 存在4條及以內(nèi)關(guān)系的任何演員和電影
match(people:People {name:"Kevin Bacon"}) - [*1..4] - (something)
return distinct something
執(zhí)行過(guò)程:
首先匹配節(jié)點(diǎn)類(lèi)型為People,屬性name為Kevin Bacon的節(jié)點(diǎn),然后將關(guān)系深度限制為從1到4再進(jìn)行遍歷,最后返回匹配的所有節(jié)點(diǎn)(去重)
- 查找與演員Kevin Bacon與Meg Ryan之間的最短路徑
match p= shortestPath((:Person {name:"Kevin Bacon"}) -[*]- (:Person {name:"Meg Ryan"})) return p
shortestPath 方法是返回找出返回的所有路徑中最短的一條
關(guān)系推薦小案例
比如要為T(mén)om推薦新的合作伙伴,一個(gè)比較好的辦法就是通過(guò)認(rèn)識(shí)Tom的人的人脈來(lái)尋找新的合作伙伴
分析:
- 先找到Tom還沒(méi)有合作過(guò)的演員,但Tom的合作伙伴曾經(jīng)與其合作過(guò)
- 找到一個(gè)可以向Tom介紹新合作伙伴的人 或者說(shuō) 找到一個(gè)可以向新合作伙伴介紹Tom的人
- 查找沒(méi)有與Tom合作過(guò)的演員
match(tom:Person {name:"Tom Hanks"}) -[:ACTED_IN]->(m:Movie) <-[:ACTED_IN]-(middleman:Person),
(middleman:Person)-[:ACTED_IN]->(n:Movie)<-[:ACTED_IN]-(new_friend:Person)
where not (tom) -[:acted_in]->(n)
return new_friend as new , count(*) as Strength
order by Strength desc
╒═════════════════════════════════════════════╤══════════╕
│"new" │"Strength"│
╞═════════════════════════════════════════════╪══════════╡
│{"name":"Tom Hanks","born":1956} │12 │
├─────────────────────────────────────────────┼──────────┤
│{"name":"Zach Grenier","born":1954} │5 │
├─────────────────────────────────────────────┼──────────┤
├─────────────────────────────────────────────┼──────────┤
│{"name":"Jack","born":1962} │5 │
├─────────────────────────────────────────────┼──────────┤
分析:
count(*) 是新伙伴與中間人合作的次數(shù)
然后根據(jù)合作的次數(shù)進(jìn)行排序
- 找人將Tom介紹給Jack
match(tom:Person {name:"Tom"}) -[:ACTED_IN] -> (m:Movie) <-[:ACTED_IN] - (middleman:Person),
(middleman:Person) -[:ACTED_IN] -> (n:Movie) <-[:ACTED_IN] - (jack:Person {name:"Jack"})
return tom,m,middleman,n,jack
清空數(shù)據(jù)庫(kù)
注意有關(guān)系存在的節(jié)點(diǎn),必須要清除關(guān)系后才能清除節(jié)點(diǎn),或者同時(shí)清除都可以,這就相當(dāng)于mysql中的外鍵聯(lián)系,必須要?jiǎng)h除外鍵后才能刪除數(shù)據(jù)
下面演示刪除所有Person,Movie節(jié)點(diǎn)及其所有關(guān)系
match(a:Person),(m:Movie) optional match (a)-[r1]-(), (m) - [r2] - () delete r1,r2,a,m
節(jié)點(diǎn)寫(xiě)(),代表任何類(lèi)型的節(jié)點(diǎn).
關(guān)系沒(méi)有箭頭,代表任何方向的關(guān)系.
關(guān)系沒(méi)有寫(xiě)類(lèi)型,代表存在的任何關(guān)系
清空數(shù)據(jù)之后,如果想要確認(rèn)是否都刪除完畢,可以使用全量查詢檢測(cè)一下
match(n) return (n) 返回所有類(lèi)型的所有節(jié)點(diǎn)