21 年前的 921 大地震,人們從凌晨睡眠中被搖醒了,上千的人民喪生,破萬的房屋倒塌,無數的家庭因此破碎,此時此刻我正在南投,一起和大家回憶這一刻。
21 年過去,倒塌的房舍大樓早已重建,人民也早已回到工作崗位與生活的步調上,煥然一新,願台灣在日後的每個考驗都能展現堅強,脫胎換骨~
在上一篇 Cypher(二) 文章中,我們介紹了 MERGE、UNWIND、WITH、FOREACH 等語句,讓查詢或新增修改更有效率,這些語句的用法還有很多種變化,仍會持續出現在之後的分享中,但今天的主題會是更新、刪除以及圖的路徑探索。
為人物增加年齡與性別兩個屬性,並更新 updated 為最新時間戳
UNWIND [{age:50}, {gender:'male'}] as property
MERGE (nolan:Person {name: '諾蘭'})
SET nolan += property
SET nolan.updated = timestamp()
SET 可以更新 Node Property,也可以更新 Relation Property
MATCH (p:Person {name: 'Jessica Thompson'})-[r:REVIEWED]->(m:Movie) WHERE ID(m) = 86
SET r.rating = 85
MATCH (nolan:Person {name: '諾蘭'})
DELETE nolan
刪除 Node 時常會遇到如下錯誤訊息,存有任何關係的 Node 是不能直接刪除的
Cannot delete node, because it still has relationships. To delete this node, you must first delete its relationships.
所以請先 MATCH relations 並刪除後,再刪除 Node。另一個作法是連同 Relation 一並刪除,但這樣的操作就要特別小心。
MATCH (nolan:Person {name: '諾蘭'})
DETACH DELETE nolan
這是官方電影資料庫的範例,目的是查詢 Kevin Bacon 四度關係內的所有Node,不包含自己。
MATCH (bacon:Person {name:"Kevin Bacon"})-[*1..4]-(hollywood)
RETURN DISTINCT hollywood
如果回傳的結果要包含自己,則是從 0 開始
MATCH (bacon:Person {name:"Kevin Bacon"})-[*0..4]-(hollywood)
RETURN DISTINCT hollywood
這一則也是官方範例,目的是尋找 Kevin Bacon 到 Meg Ryan 的最短路徑,可以說是圖算領域很常見的需求喔!shortestPath
是 Cypher 內建函數,之後會獨立分享這一部分。[*]
指的是無限制深度,這要小心使用,否則可能會導致搜索量太大造成查詢 timeout!
MATCH p=shortestPath(
(bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})
)
RETURN p
Cypher 語言的基礎查詢我就先分享到這一篇,避免大家睡著或是我自己睡著ZZZZ...
之後如果還要介紹其他語法,可能會原文編輯補充,或是彙整成更進階的範例再一次做完介紹,謝謝大家~