iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
自我挑戰組

圖形資料庫是什麼,可以吃嗎 - Neo4j系列 第 12

Cypher 語法簡介 Part3 : 該講講怎麼 Create 了吧,是要等多久

  • 分享至 

  • xImage
  •  

前情提要

標題越來越長了,內容卻越來越短了 (゚∀。)

前兩篇稍微介紹了 MATCHWHERE 這兩個查詢相關的核心語法

今天要來講講如何創造出自己的資料庫

所以讓我們從 CREATE 開始吧

CREATE

(:Name{Name:'資料庫'})-[:Type]->(:SQL:Name{Name:'關聯式資料庫'})

相信大家看完前面兩篇的文章,對於上面這段在講什麼一定非常了解了

什麼你說你還看過前面兩篇,母湯,我罰你從第一篇重看

那把他加上 CREATE 看看吧

CREATE p=(:Name{Name:'資料庫'})-[:Type]->(:SQL:Name{Name:'關聯式資料庫'})
RETURN p

MATCH 的概念一模一樣,是不是很簡單呢 (゚∀゚)

再來結合 MATCH 在剛剛的 "資料庫" 再連一條線出去吧

MATCH (n:Name{Name:'資料庫'})
CREATE p=(n)-[:Type]->(:NoSQL:Name{Name:'非關聯式資料庫'})
RETURN p

這樣 "資料庫" 就會同時連到 "關聯式資料庫" 跟 "非關聯式資料庫" 了

不要像我一樣第一次用的時候傻傻的

CREATE p=(:Name{Name:'資料庫'})-[:Type]->(:SQL:Name{Name:'非關聯式資料庫'})

直接把 "資料庫" 的 Node 變兩個

UNWIND

如果你要新增很多比類似的資料,那每次都要打 CREATE 的話會有點麻煩

這時 UNWIND 就可以幫上忙,他可以幫忙一次新增大量的資料

UNWIND [ {Name:"Andy",Position:"Developer"}, 
         {Name:"Michael",Position:"Developer"} ] AS map
CREATE (n:Name{Name:map.Name,Position:map.Position})
RETURN n

範例來自這裡

這樣在新增上就會變得簡單許多

假設你有某一個 Node 不需要 Position 屬性的話,那可以寫成這樣
{Name:"Name",Position:NULL}
這樣這個節點就不會有 Position 屬性了

注意 如果寫成這樣
{Name:"Name",Position:""}
那你會獲得一個,有 Position 屬性但沒有值Node

MERGE

在上面 CREATE 有提到不小心沒處理好的話,可能會不小心重複新增資料

這時候 MERGE 就會很好用,他會先做比對確定沒有才會新增

假設這是原始的 Node

那麼這時我們用一樣的資料下 MERGE --> MERGE (n:Weapon{Name:"阿姆斯特朗砲"})

你會發他並沒有重複新增,但是如果你多加了一些屬性上去

--> MERGE (n:Weapon{Name:"阿姆斯特朗砲",Size:30})

嗯 他多新增了一個點

對於 MERGE 來說所有有訂出來的 Property 都要長的一樣,他才會認為是同一個點

ON MATCH & ON CREATE

從剛剛的內容可以發現 MERGE 會有兩個狀態

  • 有找到一樣的資料 --> 不新增
    • 類似 MATCH
  • 沒找到一樣的資料 --> 新增
    • 類似 CREATE

所以 MERGE 還有提供兩個方法對這兩種狀態做處理

ON MATCHON CREATE

顧名思義,在兩種中其中一種處發的時候會執行後面的語句

就是 if..else 的概念啦

讓我們逆轉一下,回到資料庫只有一個阿姆斯特朗砲的時候

我們來世是下面這段

MERGE (n:Weapon{Name:"阿姆斯特朗砲"}) 
ON MATCH SET n.Size = 30 
ON CREATE SET n.Status = "Create" 
RETURN n

你會發現原本的阿姆斯特朗砲多了一個 SizeProperty

因為原本 MERGE 的資料已經存在

所以他觸發了 ON MATCH 的事件,執行了 SET n.Size = 30

什麼你說 SET,修改資料啦,下篇講


感覺沒有講得很完整,但基礎架構應該是夠了 (゚∀゚)

不管了,好累,就這樣了,最近實在是太累了

明天 Cypher 語法簡介 Part4 : Set 一下新資料吧

期待明日的降臨吧 Ciao!


參考資料

Neo4j Cypher Manual

(書) Neo4j 大事典:圖形資料庫&大數據時代


排版好看的版本同步更新在我的 HackMD


上一篇
Cypher 語法簡介 Part2 : 學過 SQL 的你,似曾相似的 WHERE
下一篇
Cypher 語法簡介 Part4 : Set 一下新資料吧
系列文
圖形資料庫是什麼,可以吃嗎 - Neo4j30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言