# 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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up