CQL(Cypher)基本操作(一)
Neo4j
標籤屬性圖模型
• Nodes – 節點。在其他圖模型中稱作“點”、“頂點”、“物件”。
• Relationships – 關係。在其他圖模型中也稱作“邊”、“弧”、“線”。關係擁有型別。
• Properties – 屬性,可以定義在節點和關係上。
• Labels – 標籤,代表節點的類別。
Neo4j與MySQL
這裡有列出了一些與關係型資料庫對應的概念方便理解:
動機
類似與關係型資料庫,建立了多個數據庫
想要像訪問關係型資料庫那樣來可以無縫切換多個數據庫
然而,在neo4j 3.0都暫時沒有辦法做到:每次啟動neo4j,它只能讀取一個數據庫。
比如,現在有兩個資料庫graph.db,graph2.db。假設neo4j預設的資料庫為graph.db,啟動neo4j,這時候想要訪問graph2.db,必須修改neo4j的配置檔案,將資料庫改為graph2.db,重啟,此時才可以訪問graph2.db.
那麼,如何可以比較neat地切換資料庫呢?
配置
Linux環境 同 部落格:neo4j遠端訪問
方法
方法一:修改配置檔案
這是官方文件方法
大概思路是:
新建一個conf_test檔案
修改neo4j.conf:
# The name of the database to mount
dbms.active_database=graph2.db //你的資料庫
將新的neo4j的配置檔案的路徑設為當前session的環境變數。
重啟neo4j
問題 來了,我每次都要先新建一個conf資料夾,修改conf檔案,再設定環境變數,據麻煩!!!
方法二:建立graph.db的軟連線【推薦!!!】
(突然走向了大甩賣的風格了 -_-#)
不需要修改配置檔案,不需要設定環境變數
首次修改:
// 請將$NEO4j_HOME改為你的neo4j的安裝路徑
cd $NEO4j_HOME/data/databases/
// 儲存原來資料庫
mv graph.db graph1.db
//建立指向新資料庫的軟體接
ln -s graph2.db graph.db
//重啟neo4j
cd $NEO4j_HOME/bin
./neo4j restart
再次修改
倘若我想訪問graph3.db,就很簡單了
//建立指向新資料庫的軟體接
ln -s graph3.db graph.db
//重啟neo4j
cd $NEO4j_HOME/bin
./neo4j restart
CQL基本簡介
Neo4j使用Cypher查詢圖形資料,Cypher是描述性的圖形查詢語言,語法簡單,功能強大,由於Neo4j在圖形資料庫家族中處於絕對領先的地位,擁有眾多的使用者基數,使得Cypher成為圖形查詢語言的事實上的標準
CQL代表Cypher查詢語言。 像Oracle資料庫具有查詢語言SQL,Neo4j具有CQL作為查詢語言。
Cypher語言的關鍵字不區分大小寫,但是屬性值,標籤,關係型別和變數是區分大小寫的。
CQL資料型別
S.No. | CQL資料型別 | 用法 |
---|---|---|
1. | boolean | 用於表示布林文字:true,false。 |
2. | byte | 用於表示8位整數。 |
3. | short | 用於表示16位整數。 |
4. | int | 用於表示32位整數。 |
5. | long | 用於表示64位整數。 |
6. | float | I用於表示32位浮點數。 |
7. | double | 用於表示64位浮點數。 |
8. | char | 用於表示16位字元。 |
9. | String | 用於表示字串。 |
常用CQL命令與函式
通過常用命令實現圖資料的增刪改查
S.No. | CQL命令/條 | 用法 |
---|---|---|
1。 | CREATE 建立 | 建立節點,關係和屬性 |
2。 | MATCH 匹配 | 檢索有關節點,關係和屬性資料 |
3。 | RETURN 返回 | 返回查詢結果 |
4。 | WHERE 哪裡 | 提供條件過濾檢索資料 |
5。 | DELETE 刪除 | 刪除節點和關係 |
6。 | REMOVE 移除 | 刪除節點和關係的屬性 |
7。 | ORDER BY 以…排序 | 排序檢索資料 |
8。 | SET 組 | 新增或更新標籤 |
常用函式
S.No. | 定製列表功能 | 用法 |
---|---|---|
1。 | String 字串 | 它們用於使用String字面量。 |
2。 | Aggregation 聚合 | 它們用於對CQL查詢結果執行一些聚合操作。 |
3。 | Relationship 關係 | 他們用於獲取關係的細節,如startnode,endnode等。 |
圖資料的形式
基本語法
節點
節點必須包含在括號 () 內
(n:Label1:Label2)
• 標籤名前必須有冒號
• 節點可以有多個標籤
• 標籤對節點進行分類,似關係資料庫中的表 標籤對節點進行分類,類似關係資料庫中的表
(n)
節點可以沒有或者不指定標籤
(n:Label {prop: 'value'})
節點可以有屬性
關係
關係兩端各有一個短橫線 /減號,用方括包含關係型別 ,關係型別名前面必須有冒號 (:) 。在其中一端用 >或 < 代表關係的方向,也可以沒有方向
- - ,<- -,- ->
-[:DIRECTED]- ->
關係以短劃線\減號和方括號包含
與標籤一樣關係型別前必須要有“:”
- ->或 -[r:TYPE] ->
關係在建立時必須指定方向
關係在查詢時可以不指定方向表示雙向關係
< >指定關係的方 向
關係也可以有屬性
-[:KNOWS {since: 2010}]
模式
模式是由關係連線起來的節點構成的表示式,關係可以是有方向的,也可以沒有方向,雙向的
() -[] -()
() -[] ->()
()< -[] -()
模式的例子
(n:Label {prop:'value'})-[:TYPE]- >(m:Label)
- 最基本的模式:由一類關係連線兩個節點 最基本的模式:
- 由一類關係連線兩個節點
(p1:Person {name:'Alice'}) -[:KNOWS][->(p2:Person {name:'Bob'})
如果存在從Alice到Bob的、型別為KNOWS的關係,那麼上面模式會將匹配的節點儲存在 p1 和p2中。
Cypher查詢的組成部分
eg1.
eg 2.
eg 3.
圖查詢的結果 vs表狀資料結果
eg 4.