neo4j資料庫之節點與關係的增刪改查

2021-10-03 18:59:36 字數 4419 閱讀 5793

2.建立關係

補充說明

3. 查詢節點和關係

4.刪除節點和關係

5.修改關係、屬性、標籤

做畢設的時候用到了很多之前沒有用過的工具,也學了不少東西,想著趁這個時間把這些東西都記錄下來,便於以後使用。

計算機系小白乙個,如有不對請多指正。

create (n) //建立乙個節點

create (n),(m) //建立兩個節點

也可以這麼做:

create (:person),

(:person),

(:person)

cypher語句中可以出現中文不需要更改編碼方式,但是要注意屬性之間的逗號是英文的逗號,引號也是英文的引號,在引號中可以出現中文

create (n:person)	//建立乙個標籤為person的節點

create (n:person:husband) //建立帶有多個標籤(person,husband)的節點

create(n:person) return n
在建立節點的時候,資料庫會自動為節點分配乙個id

create 

(:)-

[:]->

(:)return

示例如下

create (n:person)-[r:love]->(m:person)
這裡要注意,前後兩個node不能一樣(就像n和m,不能兩個都是n),建立關係時一定是有向關係,要注意指向m的那個箭頭,最開始我就是因為一直沒加箭頭一直報語法錯誤。

按照上述語句,我們就建立了乙個標籤是person屬性中name為sherlock的節點,和乙個標籤是person屬性中name為john的節點,他們之間的關係是sherlock指向john的,關係名為love

在這個基礎上,我們還可以給關係增添屬性

語法如下:

create  

(:{})-

[:{}]

->(:{})

return #return可選。 如果我們想立即看到結果,那麼使用它。 否則,我們可以省略這個子句。

示例如下:

create (n:detective)-[r:care]->(m:women)
其實和帶有屬性的節點是完全類似的

這裡要使用到查詢語句 match

具體語法規則如下

match (:),(:)

create

()-[:]->()

return #return子句是可選的。 如果我們想立即看到結果,那麼使用它。 否則,我們可以省略這個子句。

示例如下:

match (n:doctor),(m:detective)

create (n)-[r:likes]->(m)

return n,r,m

在查詢節點的時候,我們可以增加限制,使用where語句為節點新增限制

match (n:doctor),(m:detective)

where n.name="john" and m.name="sherlock"

create (n)-[r:likes]->(m)

return n,r,m

之前說過,資料庫會自動為節點分配乙個id,每乙個都不一樣,所以如果想要精確的找到,可以使用id查詢

match (n:doctor),(m:detective)

where id(m)=221 and id(n)=234

create (n)-[r:likes]->(m)

return n,r,m

這裡要注意是id(n)而不是n.id,n.id是查詢節點n的屬性中名為id的值,二者不一樣

1.建立節點和關係語句必須一次執行完,否則建立關係時()中的節點被認為是新的節點。

2.match,create,return 大寫小寫不影響語法正確與否

3.使用match語句之後如果不對資料庫中的資料進行修改一定要使用return語句,否則會報語法錯誤(比如說match (n) 這樣的句子是錯誤的)

最基本的查詢語句

match (n) 

return n

查詢某個標籤的節點

match (n:doctor)

return n

查詢帶有某個屬性的節點

match(n)

return n

使用id查詢

match (n)

where id(n)=222

return n

指定節點,查詢跟這個節點相關的節點

match (n)-[r:likes]-(m)

where n.name="reese"

return m

最後再來乙個比較特殊的,查詢孤立節點

match (n)

where not (n)--()

return n

(這部分**於

指定關係的方向來查詢節點

match (:person )-->(movie)

return movie.title

查詢關係的型別

在查詢關係時,可以在match子句中指定關係變數,後續子句可以引用該變數,例如,使用type()函式檢視關係的型別:

match (:person )-[r]->(movie)

return type(r)

匹配關係型別

在匹配關係時,可以指定關係的型別

match (wallstreet:movie )<-[:acted_in]-(actor)

return actor.name

匹配多種關係型別

在匹配關係時,可以指定多種關係的型別,只需要匹配其中任意乙個關係型別就匹配成功

match (wallstreet )<-[:acted_in|:directed]-(person)

return person.name

匹配關係型別,並指定關係變數

match (wallstreet )<-[r:acted_in]-(actor)

return r.role

匹配多個關係

match (charlie )-[:acted_in]->(movie)<-[:directed]-(director)

return movie.title, director.name

這裡只需要記住一點:先刪關係,再刪節點。

當我們想要刪除節點時,如果它和其他節點之間存在關係,那麼單獨刪除節點會報錯,正確**如下

match (n:dc)-[r]-()

delete n,r

這樣我們就刪除了這個節點和它的所有關係(雙向的)

通常情況下,乙個節點會和其他節點產生多條關係,而我們只想刪掉某一種,這時可以指定刪除某種關係,示例如下

match (n:dc)-[r:son]-()

delete r

這條語句指定刪除了名為son的關係

這裡要注意只能刪除r,不能刪除n,因為節點沒有把所有關係都刪除掉,所以它不能被刪除。

remove,專門用來刪除屬性和標籤,比delete安全一些。

match (n:dc) remove n.age
這樣節點的age屬性就被刪掉了

match (n)

optional match (n)-[r]-()

delete n,r

刪庫跑路有時的確是不錯的選擇(不)

match (r:dc)

set r.name="jason"

對節點的name屬性進行了修改

match (n:dc)-[r:father]-(m:dc)

where id(n)=500 and id(m)=401

create (n)-[r2:daddy]->(m)

delete r

這裡要記得,新建的關係是r2不要和r重名了

match (n:old_label) 

remove n:old_label

set n:new_label

neo4j建立節點之間的關係

節點的建立時很簡單的,只要用create建立名字和屬性即可。但是節點的關係建立有點複雜,因為需要考慮如何匹配到有關係的兩個節點,以及關係本身的屬性如何設定。這裡我簡單學一下如何建立節點之間的關係。選擇的順序是由易到難,而不是場景的使用頻率。語法 create return 案例 create fb1...

neo4j安裝 基於Neo4j的知乎關係爬蟲

首先交代一下爬蟲所用到的資料庫和環境 neo4j使用類似sql的查詢語言cypher,關於cypher的使用和簡單demo,可以參考cypher查詢語言 neo4j中的sql。當然,為了減少學習cypher的時間成本,我在python環境中安裝了py2neo,pip install py2neo。p...

Neo4j刪除節點和關係 徹底刪除節點標籤名

總結提前 先刪關係,再刪節點 當記不得關係名時,type r 可以查到關係名 徹底刪除節點標籤名,需要刪除前期對該標籤名建立的索引 問題描述 資料庫裡已經建立好了節點和關係,現在想刪除bc company bc knowledge bc person coin這4類節點,但是它們之間存在複雜的關係。...