iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
AI & Data

看圖說故事,讓 Neo4j 重新詮釋你的資料庫系列 第 6

Neo4j 資料庫查詢語言 Cypher 第三部

Neo4j 看圖說故事 - 21年前的今天

Neo4j Earthquake of Taiwan
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

刪除 Node

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...
之後如果還要介紹其他語法,可能會原文編輯補充,或是彙整成更進階的範例再一次做完介紹,謝謝大家~


上一篇
Neo4j 資料庫查詢語言 Cypher 第二部
下一篇
Neo4j 預存資料集與 Sandbox
系列文
看圖說故事,讓 Neo4j 重新詮釋你的資料庫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言