Neo4j - CQL(Cypher)基本操作(一)

更多可以閱讀https://blog.csdn.net/column/details/23835.html

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.floatI用於表示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.
這裏寫圖片描述

這裏寫圖片描述

命名規範

這裏寫圖片描述

參考文獻:Neo4j Inc. APAC 2018年 俞方樺
參考文獻:https://www.cnblogs.com/wenruo/p/7850120.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章