# Neo4j語法教學 ## 簡介 Neo4j是一種非關聯式圖數據庫(Graph Database),它以節點(Node)和關係(Relationship)構成的圖結構,比如它可能長這樣 每個節點可與其它節點建立有向的關係,並且可以透過關係進行匹配,其中每個節點和關係都可以存key:value型式的資料。 ## 基本語法樣式 ``` ()-[]->() ``` 是語法一個的基本形式 ()表示節點, -表示連接/無向, ->表示有向連接 比如上述的深藍色節點它可能是 ``` (:Dcbot)-[:item]->(:User) ``` 這描述了從Dcbot這個節點以item的關係名稱指向User節點 ``` (變數名稱:節點名稱{key1:value1,key2:value2}) -[變數名稱:關係名稱{key:value}] ->(變數名稱:節點名稱{key:value}) ``` 完整形式如同上述 變數名稱如果未使用可直接省略, {key:value}組也可以直接省略 其中換行和空格不是必須的 它的基本資料型別如同Java ## CREATE 只創建一個節點 ``` CREATE(:Dcbot) ``` 或是如同上面的格式創建一個有向的兩個節點及其關係 (注: 創建只能是有向的關係,無向僅用於匹配時不匹配方向) ``` CREATE(:Dcbot{name:"Dcbot"})- [:item{name:"item"}]-> (:User{name:"User"}) ``` 也可以一次創建多個關係 ``` CREATE (dcbot:Dcbot{name:"Dcbot"})- [:item{name:"item"}]-> (:User{name:"User"}) , (dcbot)-[:item]-(:Channels) ``` 注意到了嗎,它的關鍵字後的()並不是語句範圍,關鍵字到下一個關鍵字之間全都是範圍內,上面CREATE後接的()只是表示節點而已 ## MATCH 取得全部 ``` MATCH (n) RETURN n ``` 上面由於省略了關係等等的,那個n是變數,n被匹配了任意形式的節點 接著RETURN關鍵詞接著的是要返回的結果 同樣的,上面()跟MATCH關鍵字並沒有直接關係,從MATCH到RETURN中間都是MATCH語句的範圍 匹配名稱Dcbot的全部節點 ``` MATCH (node:Dcbot) RETURN node ``` 也可以使用()-[]-()匹配兩個節點和其關係,()-[]-()表示不去理會兩個節點的方向 ()-[]->()則表示只匹配前面的節點->後面的節點,如果方向反過來就抓不到 若()和[]不指定條件則可直接留空,例如: ``` MATCH (a)-[:item]-(b) RETURN a, b ``` 上面我匹配了全部關係名稱是item的內容,且不指定節點兩邊的條件,那個a和b只是用來保存的變數名稱 另外要注意,MATCH一定要搭配其他動作,比如RETURN,否則會報錯 ## WHERE WHERE亦及判斷條件 ``` WHERE 判斷條件 ``` 比如我要從任意父節點-關係是item-尋找子節點的name是"User"的 ``` MATCH ()-[:item]-(node) WHERE node.name = "User" LIMIT 5 RETURN node ``` 上面一開始MATCH可能匹配到許多結果,經由WHERE後將只剩下符合WHERE條件的內容 以及可以使用LIMIT限制我只取得前面多少筆資料 詳細的判斷相關函數請參照官網說明 https://neo4j.com/docs/cypher-manual/current/functions/predicate/#functions-exists ## SET 當節點或關係中的內容要改變時,只需要在xxx=yyy前面加上SET即可 比如 ``` SET node.name = "another name" ``` ## REMOVE 刪除於節點/關係內容中的一個key 比如我先創建一個節點,名稱是Test,且有個a:'aaa'的一組資料 ``` CREATE (:Test{a:'aaa'}) ``` 接著將上面節點的a內容刪掉 ``` MATCH (node:Test) REMOVE node.a RETURN node ``` 可以看到那個Test節點中沒有a欄位了 ## DELETE 刪除整個節點/關係,如果節點本身包含關係則必須先將它的連接關係刪掉 呈上述的內容,現在有一個Test節點,接著將它刪掉 ``` MATCH (node:Test) DELETE node ``` 接著進行整張圖的查詢 ``` MATCH (n) RETURN n ``` 可以發現沒有了Test節點 \ 整個語法基本使用大概就這樣
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.