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類節點,但是它們之間存在複雜的關係。...