Neo4j 快速指南



Neo4j - 概述

Neo4j 是全球領先的開源圖資料庫,使用 Java 技術開發。它具有高度可擴充套件性和無模式特性(NoSQL)。

什麼是圖資料庫?

圖是物件集合的一種圖形化表示,其中某些物件對透過連結連線。它由兩個元素組成 - 節點(頂點)和關係(邊)。

圖資料庫是一種用於以圖的形式建模資料的資料庫。在這裡,圖的節點描述實體,而關係描述這些節點的關聯。

流行的圖資料庫

Neo4j 是一種流行的圖資料庫。其他圖資料庫包括 Oracle NoSQL 資料庫、OrientDB、HypherGraphDB、GraphBase、InfiniteGraph 和 AllegroGraph。

為什麼選擇圖資料庫?

如今,大多數資料都以不同物件之間關係的形式存在,而且通常,資料之間的關係比資料本身更有價值。

關係型資料庫儲存高度結構化的資料,這些資料包含儲存相同型別資料的多個記錄,因此它們可用於儲存結構化資料,並且它們不儲存資料之間的關係。

與其他資料庫不同,圖資料庫將關係和連線作為一等實體儲存。

圖資料庫的資料模型比其他資料庫更簡單,並且可以與 OLTP 系統一起使用。它們提供諸如事務完整性和操作可用性等功能。

RDBMS 與圖資料庫

下表比較了關係型資料庫和圖資料庫。

序號 RDBMS 圖資料庫
1
2 節點
3 列和資料 屬性及其值
4 約束 關係
5 連線 遍歷

Neo4j 的優勢

以下是 Neo4j 的優勢。

  • 靈活的資料模型 - Neo4j 提供了一個靈活、簡單且強大的資料模型,可以根據應用程式和行業輕鬆更改。

  • 即時洞察 - Neo4j 提供基於即時資料的成果。

  • 高可用性 - Neo4j 對於大型企業即時應用程式具有高可用性,並提供事務保證。

  • 連線和半結構化資料 - 使用 Neo4j,您可以輕鬆表示連線和半結構化資料。

  • 輕鬆檢索 - 使用 Neo4j,與其他資料庫相比,您不僅可以表示,還可以輕鬆檢索(遍歷/導航)連線資料。

  • Cypher 查詢語言 - Neo4j 提供了一種宣告式查詢語言,使用 ASCII 藝術語法以圖形方式表示圖。該語言的命令採用人類可讀格式,非常易於學習。

  • 無需連線 - 使用 Neo4j,它不需要複雜的連線來檢索連線/相關資料,因為它非常容易檢索其相鄰節點或關係詳細資訊,無需連線或索引。

Neo4j 的特性

以下是 Neo4j 的顯著特性 -

  • 資料模型(靈活模式) - Neo4j 遵循名為原生屬性圖模型的資料模型。在這裡,圖包含節點(實體),這些節點彼此連線(由關係表示)。節點和關係以鍵值對的形式儲存資料,稱為屬性。

    在 Neo4j 中,無需遵循固定模式。您可以根據需要新增或刪除屬性。它還提供模式約束。

  • ACID 屬性 - Neo4j 支援完整的 ACID(原子性、一致性、隔離性和永續性)規則。

  • 可擴充套件性和可靠性 - 您可以透過增加讀取/寫入次數和資料量來擴充套件資料庫,而不會影響查詢處理速度和資料完整性。Neo4j 還支援複製以確保資料安全性和可靠性。

  • Cypher 查詢語言 - Neo4j 提供了一種強大的宣告式查詢語言,稱為 Cypher。它使用 ASCII 藝術來描述圖。Cypher 易於學習,可用於建立和檢索資料之間的關係,而無需使用像連線這樣的複雜查詢。

  • 內建 Web 應用程式 - Neo4j 提供了一個內建的Neo4j 瀏覽器 Web 應用程式。使用它,您可以建立和查詢您的圖資料。

  • 驅動程式 - Neo4j 可以與 -

    • REST API 協作,以使用 Java、Spring、Scala 等程式語言。

    • Java Script 協作,以使用 Node JS 等 UI MVC 框架。

    • 它支援兩種 Java API:Cypher API 和原生 Java API,用於開發 Java 應用程式。除此之外,您還可以與其他資料庫(如 MongoDB、Cassandra 等)協作。

  • 索引 - Neo4j 使用 Apache Lucence 支援索引。

Neo4j - 資料模型

Neo4j 屬性圖資料模型

Neo4j 圖資料庫遵循屬性圖模型來儲存和管理其資料。

以下是屬性圖模型的關鍵特性 -

  • 該模型以節點、關係和屬性表示資料

  • 屬性是鍵值對

  • 節點用圓圈表示,關係用箭頭表示

  • 關係具有方向:單向和雙向

  • 每個關係都包含“起始節點”或“起始節點”和“目標節點”或“結束節點”

  • 節點和關係都包含屬性

  • 關係連線節點

在屬性圖資料模型中,關係應該是定向的。如果我們嘗試建立無方向關係,則會引發錯誤訊息。

在 Neo4j 中,關係也應該是定向的。如果我們嘗試建立無方向關係,則 Neo4j 會引發一條錯誤訊息,指出“關係應該是定向的”。

Neo4j 圖資料庫將其所有資料儲存在節點和關係中。我們既不需要額外的 RRBMS 資料庫,也不需要任何 SQL 資料庫來儲存 Neo4j 資料庫資料。它以其原生格式以圖的形式儲存其資料。

Neo4j 使用原生 GPE(圖處理引擎)與其原生圖儲存格式協作。

圖資料庫資料模型的主要構建塊是 -

  • 節點
  • 關係
  • 屬性

以下是一個簡單的屬性圖示例。

Property Graph

在這裡,我們使用圓圈表示節點。關係用箭頭表示。關係是定向的。我們可以用屬性(鍵值對)表示節點的資料。在這個示例中,我們在節點圓圈內表示了每個節點的 Id 屬性。

Neo4j - 環境設定

在本節中,我們將討論如何使用 exe 檔案在您的系統中安裝 Neo4j。

使用 Windows exe 檔案設定 Neo4j 資料庫伺服器

按照以下步驟將 Neo4j 下載到您的系統中。

步驟 1 - 使用 https://neo4j.com/ 訪問 Neo4j 官方網站。點選此連結將帶您進入 Neo4j 網站的主頁。

Home Page

步驟 2 - 如上圖所示,此頁面在右上角有一個“下載”按鈕。點選它。

步驟 3 - 這將重定向到下載頁面,您可以在其中下載 Neo4j 的社群版和企業版。透過點選相應的按鈕下載軟體的社群版。

Download Page

步驟 4 - 這將帶您進入一個頁面,您可以在其中下載與不同作業系統相容的 Neo4j 軟體的社群版本。下載與所需作業系統對應的檔案。

Respective Operating System

這將在您的系統中下載一個名為neo4j-community_windows-x64_3_1_1.exe 的檔案,如下面的螢幕截圖所示。

Community Windows

步驟 5 - 雙擊 exe 檔案以安裝 Neo4j 伺服器。

Exe File

步驟 6 - 接受許可協議並繼續安裝。安裝完成後,您可以觀察到 Neo4j 已安裝到您的系統中。

啟動伺服器

步驟 1 - 點選 Windows 開始選單,並透過點選 Neo4j 的開始選單快捷方式啟動 Neo4j 伺服器。

Starting Server

步驟 2 - 點選快捷方式後,您將看到 Neo4j 社群版的視窗。預設情況下,它選擇 c:\Users\[username]\Documents\Neo4j\default.graphdb。如果需要,您可以將路徑更改為其他目錄。

Shortcut

步驟 3 - 點選“啟動”按鈕以啟動 Neo4j 伺服器。

Start Button

伺服器啟動後,您可以觀察到資料庫目錄已填充,如下面的螢幕截圖所示。

Database Directory

使用 Neo4j

如前幾節所述,neo4j 提供了一個內建的瀏覽器應用程式來使用 Neo4j。您可以使用 URL https://:7474/ 訪問 Neo4j

Working

Neo4j - 構建塊

Neo4j 圖資料庫具有以下構建塊 -

  • 節點
  • 屬性
  • 關係
  • 標籤
  • 資料瀏覽器

節點

節點是圖的基本單元。它包含屬性,屬性以鍵值對的形式表示,如下面的影像所示。

Node

這裡,節點名稱 =“員工”,它包含一組作為鍵值對的屬性。

屬性

屬性是鍵值對,用於描述圖節點和關係。

Key = Value 

其中鍵是字串,值可以使用任何 Neo4j 資料型別表示。

關係

關係是圖資料庫的另一個主要構建塊。它連線兩個節點,如下圖所示。

Relationship

這裡,Emp 和 Dept 是兩個不同的節點。“WORKS_FOR” 是 Emp 和 Dept 節點之間的一種關係。

如所示,從 Emp 到 Dept 的箭頭表示此關係描述 -

Emp WORKS_FOR Dept 

每個關係包含一個起始節點和一個結束節點。

這裡,“Emp” 是起始節點,“Dept” 是結束節點。

由於此關係箭頭表示從“Emp”節點到“Dept”節點的關係,因此此關係被稱為“Dept”節點的“傳入關係”和“Emp”節點的“傳出關係”。

與節點類似,關係也可以包含鍵值對形式的屬性。

Properties

這裡,“WORKS_FOR” 關係具有一對鍵值對形式的屬性。

Id = 123 

它表示此關係的 ID。

標籤

標籤將一個通用名稱關聯到一組節點或關係。節點或關係可以包含一個或多個標籤。我們可以為現有節點或關係建立新的標籤。我們可以從現有節點或關係中刪除現有標籤。

從前面的圖中,我們可以觀察到有兩個節點。

左側節點的標籤為:“Emp”,右側節點的標籤為:“Dept”。

這兩個節點之間的關係也具有標籤:“WORKS_FOR”。

注意 - Neo4j 將資料儲存在節點或關係的屬性中。

Neo4j 資料瀏覽器

安裝 Neo4j 後,我們可以使用以下 URL 訪問 Neo4j 資料瀏覽器

https://:7474/browser/

Data Browser

Neo4j 資料瀏覽器用於執行 CQL 命令並檢視輸出。

這裡,我們需要在美元提示符處執行所有 CQL 命令:“$”

在美元符號後鍵入命令,然後單擊“執行”按鈕執行您的命令。

它與 Neo4j 資料庫伺服器互動,檢索並顯示美元提示符正下方的結果。

使用“VI 檢視”按鈕以圖表格式檢視結果。上圖以“UI 檢視”格式顯示結果。

使用“網格檢視”按鈕以網格檢視檢視結果。下圖以“網格檢視”格式顯示相同的結果。

Grid View

當我們使用“網格檢視”檢視查詢結果時,我們可以將其匯出到兩種不同格式的檔案中。

CSV

單擊“匯出 CSV”按鈕以 csv 檔案格式匯出結果。

CSV

JSON

單擊“匯出 JSON”按鈕以 JSON 檔案格式匯出結果。

Json

但是,如果我們使用“UI 檢視”檢視查詢結果,則只能以一種格式匯出它們:JSON

Neo4j CQL - 簡介

CQL 代表 Cypher 查詢語言。就像 Oracle 資料庫具有查詢語言 SQL 一樣,Neo4j 具有 CQL 作為查詢語言。

Neo4j CQL

  • 是 Neo4j 圖資料庫的查詢語言。
  • 是一種宣告式模式匹配語言。
  • 遵循類似 SQL 的語法。
  • 語法非常簡單,並且以人類可讀的格式呈現。

就像 Oracle SQL

  • Neo4j CQL 具有執行資料庫操作的命令。

  • Neo4j CQL 支援許多子句,例如 WHERE、ORDER BY 等,以便輕鬆編寫非常複雜的查詢。

  • Neo4j CQL 支援一些函式,例如字串、聚合。除了它們之外,它還支援一些關係函式。

Neo4j CQL 子句

以下是 Neo4j Cypher Query Language 的讀取子句 -

序號 讀取子句 用法
1 MATCH 此子句用於使用指定的模式搜尋資料。
2 OPTIONAL MATCH 這與匹配相同,唯一的區別是如果模式的某些部分丟失,它可以使用空值。
3 WHERE 此子句 ID 用於向 CQL 查詢新增內容。
4 START 此子句用於透過舊版索引查詢起始點。
5 LOAD CSV 此子句用於從 CSV 檔案匯入資料。

以下是 Neo4j Cypher Query Language 的寫入子句 -

序號 寫入子句 用法
1 CREATE 此子句用於建立節點、關係和屬性。
2 MERGE 此子句驗證指定的模式是否存在於圖中。如果不存在,它將建立該模式。
3 SET 此子句用於更新節點上的標籤、節點和關係上的屬性。
4 DELETE 此子句用於從圖中刪除節點和關係或路徑等。
5 REMOVE 此子句用於從節點和關係中刪除屬性和元素。
6 FOREACH 此類用於更新列表中的資料。
7 CREATE UNIQUE 使用 CREATE 和 MATCH 子句,您可以透過匹配現有模式並建立缺失模式來獲得唯一的模式。
8 使用 Cypher 匯入 CSV 檔案 使用 Load CSV,您可以從 .csv 檔案匯入資料。

以下是 Neo4j Cypher Query Language 的通用子句 -

序號 通用子句 用法
1 RETURN 此子句用於定義要在查詢結果集中包含的內容。
2 ORDER BY 此子句用於按順序排列查詢的輸出。它與RETURNWITH子句一起使用。
3 LIMIT 此子句用於將結果中的行限制為特定值。
4 SKIP 此子句用於定義從哪一行開始包含輸出中的行。
5 WITH 此子句用於將查詢部分連結在一起。
6 UNWIND 此子句用於將列表擴充套件為一系列行。
7 UNION 此子句用於組合多個查詢的結果。
8 CALL 此子句用於呼叫部署在資料庫中的過程。

Neo4j CQL 函式

以下是常用的 Neo4j CQL 函式 -

序號 CQL 函式 用法
1 字串 它們用於處理字串文字。
2 聚合 它們用於對 CQL 查詢結果執行一些聚合操作。
3 關係 它們用於獲取關係的詳細資訊,例如起始節點、結束節點等。

我們將在後續章節中詳細討論所有 Neo4j CQL 命令、子句和函式的語法、用法和示例。

Neo4j CQL 資料型別

這些資料型別類似於 Java 語言。它們用於定義節點或關係的屬性。

Neo4j CQL 支援以下資料型別 -

序號 CQL 資料型別 用法
1 布林型 它用於表示布林文字:true、false。
2 位元組型 它用於表示 8 位整數。
3 短整型 它用於表示 16 位整數。
4 整型 它用於表示 32 位整數。
5 長整型 它用於表示 64 位整數。
6 浮點型 它用於表示 32 位浮點數。
7 雙精度浮點型 它用於表示 64 位浮點數。
8 字元型 它用於表示 16 位字元。
9 字串 它用於表示字串。

CQL 運算子

以下是 Neo4j Cypher 查詢語言支援的運算子列表。

序號 型別 運算子
1 數學運算子 +, -, *, /, %, ^
2 比較運算子 +, <>, <, >, <=, >=
3 布林型 AND、OR、XOR、NOT
4 字串 +
5 列表 +、IN、[X]、[X…..Y]
6 正則表示式 =-
7 字串匹配 STARTS WITH、ENDS WITH、CONSTRAINTS

Neo4j CQL 中的布林運算子

Neo4j 支援以下布林運算子在 Neo4j CQL WHERE 子句中使用以支援多個條件。

序號 布林運算子 描述
1 AND 它是 Neo4j CQL 關鍵字,用於支援 AND 操作。它類似於 SQL AND 運算子。
2 OR 它是 Neo4j CQL 關鍵字,用於支援 OR 操作。它類似於 SQL AND 運算子。
3 NOT 它是 Neo4j CQL 關鍵字,用於支援 NOT 操作。它類似於 SQL AND 運算子。
4 XOR 它是 Neo4j CQL 關鍵字,用於支援 XOR 操作。它類似於 SQL AND 運算子。

Neo4j CQL 中的比較運算子

Neo4j 支援以下比較運算子在 Neo4j CQL WHERE 子句中使用以支援條件。

序號 布林運算子 描述
1 = 它是 Neo4j CQL 的“等於”運算子。
2 < > 它是 Neo4j CQL 的“不等於”運算子。
3 < 它是 Neo4j CQL 的“小於”運算子。
4 > 它是 Neo4j CQL 的“大於”運算子。
5 <= 它是 Neo4j CQL 的“小於或等於”運算子。
6 > = 它是 Neo4j CQL 的“大於或等於”運算子。

Neo4j CQL - 建立節點

如前所述,節點是圖資料庫中的資料/記錄。您可以使用CREATE子句在 Neo4j 中建立節點。本章將教您如何 -

  • 建立單個節點
  • 建立多個節點
  • 建立帶標籤的節點
  • 建立帶多個標籤的節點
  • 建立帶屬性的節點
  • 返回建立的節點

建立單個節點

您可以透過簡單地指定要建立的節點的名稱以及 CREATE 子句來在 Neo4j 中建立節點。

語法

以下是使用 Cypher 查詢語言建立節點的語法。

CREATE (node_name); 

注意 - 分號 (;) 是可選的。

示例

以下是一個在 Neo4j 中建立節點的 Cypher 查詢示例。

CREATE (sample) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器,如下面的螢幕截圖所示。

Start Button

步驟 2 - 開啟瀏覽器,將以下 URL 複製貼上到位址列中https://:7474/。這將為您提供 Neo4j 的內建瀏覽器應用程式,並帶有美元提示符,如下面的螢幕截圖所示。

Browser App

步驟 3 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Dollar Prompt

結果

執行後,您將獲得以下結果。

Single Node

驗證

要驗證節點型別的建立,請在美元提示符中執行以下查詢。

MATCH (n) RETURN n 

此查詢返回資料庫中的所有節點(我們將在後續章節中詳細討論此查詢)。

執行後,此查詢將顯示建立的節點,如下面的螢幕截圖所示。

Nodes in Database

建立多個節點

Neo4j CQL 的 create 子句也用於同時建立多個節點。為此,您需要傳遞要建立的節點的名稱,並用逗號分隔。

語法

以下是使用 CREATE 子句建立多個節點的語法。

CREATE (node1),(node2)

示例

以下是在 Neo4j 中建立多個節點的 Cypher 查詢示例。

CREATE (sample1),(sample2) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Desired Query

結果

執行後,您將獲得以下結果。

Multiple Node

驗證

要驗證節點的建立,請在美元提示符中鍵入並執行以下查詢。

MATCH (n) RETURN n 

此查詢返回資料庫中的所有節點(我們將在後續章節中詳細討論此查詢)。

執行後,此查詢將顯示建立的節點,如下面的螢幕截圖所示。

Multiple Verification

建立帶標籤的節點

Neo4j 中的標籤用於使用標籤對節點進行分組(分類)。您可以使用 CREATE 子句在 Neo4j 中為節點建立標籤。

語法

以下是使用 Cypher 查詢語言建立帶標籤的節點的語法。

CREATE (node:label) 

示例

以下是在 Neo4j 中建立帶標籤的節點的 Cypher 查詢示例。

CREATE (Dhawan:player) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Node Label

結果

執行後,您將獲得以下結果。

Node Statement

驗證

要驗證節點的建立,請在美元提示符中鍵入並執行以下查詢。

MATCH (n) RETURN n 

此查詢返回資料庫中的所有節點(我們將在後續章節中詳細討論此查詢)。

執行後,此查詢將顯示建立的節點,如下面的螢幕截圖所示。

Label Verification

建立帶多個標籤的節點

您還可以為單個節點建立多個標籤。您需要透過用冒號“:”分隔它們來指定節點的標籤。

語法

以下是建立具有多個標籤的節點的語法。

CREATE (node:label1:label2:. . . . labeln) 

示例

以下是一個在 Neo4j 中建立具有多個標籤的節點的 Cypher 查詢示例。

CREATE (Dhawan:person:player) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Multiple Label

結果

執行後,您將獲得以下結果。

Executed Query

驗證

要驗證節點的建立,請在美元提示符中鍵入並執行以下查詢。

MATCH (n) RETURN n 

此查詢返回資料庫中的所有節點(我們將在後續章節中詳細討論此查詢)。

執行後,此查詢將顯示建立的節點,如下面的螢幕截圖所示。

Multi Label Verification

建立具有屬性的節點

屬性是節點用於儲存資料的鍵值對。您可以使用 CREATE 子句建立具有屬性的節點。您需要在花括號“{ }”內用逗號分隔這些屬性。

語法

以下是建立具有屬性的節點的語法。

CREATE (node:label { key1: value, key2: value, . . . . . . . . .  }) 

示例

以下是一個建立具有屬性的節點的 Cypher 查詢示例。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Property Step

結果

執行後,您將獲得以下結果。

Lable Result

驗證

要驗證節點的建立,請在美元提示符中鍵入並執行以下查詢。

MATCH (n) RETURN n 

此查詢返回資料庫中的所有節點(我們將在後續章節中詳細討論此查詢)。

執行後,此查詢將顯示建立的節點,如下面的螢幕截圖所示。

Creation Node

返回已建立的節點

在整章中,我們使用MATCH (n) RETURN n查詢來檢視已建立的節點。此查詢返回資料庫中所有現有的節點。

我們可以使用 RETURN 子句與 CREATE 一起檢視新建立的節點,而不是使用此方法。

語法

以下是返回 Neo4j 中節點的語法。

CREATE (Node:Label{properties. . . . }) RETURN Node 

示例

以下是一個建立具有屬性並返回它的節點的 Cypher 查詢示例。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) RETURN Dhawan 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Play Button

結果

執行後,您將獲得以下結果。

Return Node

Neo4j CQL - 建立關係

在 Neo4j 中,關係是用於連線圖中兩個節點的元素。這些關係具有方向、型別和資料形式模式。本章將教您如何 -

  • 建立關係
  • 在現有節點之間建立關係
  • 建立具有標籤和屬性的關係

建立關係

我們可以使用 CREATE 子句建立關係。我們將根據關係的方向在方括號“[ ]”內指定關係,它位於連字元“ - ”和箭頭“ → ”之間,如下面的語法所示。

語法

以下是使用 CREATE 子句建立關係的語法。

CREATE (node1)-[:RelationshipType]->(node2) 

示例

首先,在資料庫中建立兩個節點 Ind 和 Dhawan,如下所示。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) 
CREATE (Ind:Country {name: "India"})

現在,在這兩個節點之間建立一個名為BATSMAN_OF的關係,如下所示。

CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind) 

最後,返回這兩個節點以檢視建立的關係。

RETURN Dhawan, Ind 

Browser App

將所需的查詢複製並貼上到美元提示符中,然後按如下螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Highlighted Query

結果

執行後,您將獲得以下結果。

Executing

在現有節點之間建立關係

您還可以使用MATCH子句在現有節點之間建立關係。

語法

以下是使用 MATCH 子句建立關係的語法。

MATCH (a:LabeofNode1), (b:LabeofNode2) 
   WHERE a.name = "nameofnode1" AND b.name = " nameofnode2" 
CREATE (a)-[: Relation]->(b) 
RETURN a,b 

示例

以下是一個使用匹配子句建立關係的 Cypher 查詢示例。

MATCH (a:player), (b:Country) WHERE a.name = "Shikar Dhawan" AND b.name = "India" 
CREATE (a)-[r: BATSMAN_OF]->(b) 
RETURN a,b 

要執行上述查詢,請執行以下步驟。

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Existing Node

結果

執行後,您將獲得以下結果。

Executing

建立具有標籤和屬性的關係

您可以使用 CREATE 子句建立具有標籤和屬性的關係。

語法

以下是使用 CREATE 子句建立具有標籤和屬性的關係的語法。

CREATE (node1)-[label:Rel_Type {key1:value1, key2:value2, . . . n}]-> (node2) 

示例

以下是一個建立具有標籤和屬性的關係的 Cypher 查詢示例。

MATCH (a:player), (b:Country) WHERE a.name = "Shikar Dhawan" AND b.name = "India" 
CREATE (a)-[r:BATSMAN_OF {Matches:5, Avg:90.75}]->(b)  
RETURN a,b 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Label Property

結果

執行後,您將獲得以下結果。

Executing

建立完整路徑

在 Neo4j 中,路徑是使用連續關係形成的。可以使用 create 子句建立路徑。

語法

以下是使用 CREATE 子句在 Neo4j 中建立路徑的語法。

CREATE p = (Node1 {properties})-[:Relationship_Type]->
   (Node2 {properties})[:Relationship_Type]->(Node3 {properties}) 
RETURN p 

示例

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Champions Trophy

結果

執行後,您將獲得以下結果。

Result

Neo4j - Merge 命令

MERGE 命令是 CREATE 命令和 MATCH 命令的組合。

Neo4j CQL MERGE 命令搜尋圖中給定的模式。如果存在,則返回結果。

如果它不存在於圖中,則它會建立一個新的節點/關係並返回結果。

在本節中,您將學習如何 -

  • 合併具有標籤的節點
  • 合併具有屬性的節點
  • OnCreate 和 OnMatch
  • 合併關係

語法

以下是 MERGE 命令的語法。

MERGE (node: label {properties . . . . . . . }) 

在繼續本節中的示例之前,請在資料庫中建立兩個具有標籤 Dhawan 和 Ind 的節點。從 Dhawan 到 Ind 建立型別為“BATSMAN_OF”的關係,如下所示。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) 
CREATE (Ind:Country {name: "India"}) 
CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind) 

合併具有標籤的節點

您可以使用 MERGE 子句基於標籤合併資料庫中的節點。如果您嘗試基於標籤合併節點,則 Neo4j 會驗證是否存在任何具有給定標籤的節點。如果沒有,則將建立當前節點。

語法

以下是基於標籤合併節點的語法。

MERGE (node:label) RETURN node 

示例 1

以下是一個將節點合併到 Neo4j(基於標籤)的 Cypher 查詢示例。當您執行此查詢時,Neo4j 會驗證是否存在任何具有標籤player的節點。如果沒有,它會建立一個名為“Jadeja”的節點並返回它。

如果存在任何具有給定標籤的節點,Neo4j 將返回所有這些節點。

MERGE (Jadeja:player) RETURN Jadeja 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Merge

結果

執行後,您將獲得以下結果。由於您已經在資料庫中建立了一個名為“Dhawan”且標籤為“player”的節點,因此 Neo4j 會返回它,如下面的螢幕截圖所示。

Dhawan Player

示例 2

現在,嘗試合併一個名為“CT2013”且標籤名為 Tournament 的節點。由於沒有具有此標籤的節點,因此 Neo4j 會建立一個具有給定名稱的節點並返回它。

MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"}) 
RETURN CT2013, labels(CT2013)

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URLhttps://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Merging Node

結果

執行後,您將獲得以下結果。如前所述,由於沒有具有給定標籤(Tournament)的節點。Neo4j 建立並返回指定的節點,如下面的螢幕截圖所示。

Tornament

合併具有屬性的節點

您還可以合併具有屬性集的節點。如果您這樣做,Neo4j 會搜尋指定節點的相等匹配項,包括屬性。如果找不到任何匹配項,它會建立一個節點。

語法

以下是使用屬性合併節點的語法。

MERGE (node:label {key1:value, key2:value, key3:value . . . . . . . . }) 

示例

以下是一個使用屬性合併節點的 Cypher 查詢示例。此查詢嘗試使用屬性和標籤合併名為“jadeja”的節點。由於沒有具有相同標籤和屬性的節點,因此 Neo4j 會建立一個節點。

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
RETURN Jadeja 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URLhttps://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Merging Properties

結果

執行後,您將獲得以下結果。如前所述,由於沒有具有指定標籤和屬性的節點,因此它會建立一個節點,如下面的螢幕截圖所示。

Property Result

OnCreate 和 OnMatch

無論何時執行合併查詢,節點要麼匹配要麼建立。使用 on create 和 on match,您可以設定屬性以指示節點是建立還是匹配。

語法

以下是OnCreateOnMatch子句的語法。

MERGE (node:label {properties . . . . . . . . . . .}) 
ON CREATE SET property.isCreated ="true" 
ON MATCH SET property.isFound ="true"

示例

以下是一個演示 Neo4j 中OnCreateOnMatch子句用法的 Cypher 查詢示例。如果指定的節點已存在於資料庫中,則該節點將被匹配,並且將在節點中建立鍵值對 isFound = "true" 的屬性。

如果指定的節點不存在於資料庫中,則將建立該節點,並在其中建立鍵值對 isCreated ="true" 的屬性。

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
ON CREATE SET Jadeja.isCreated = "true" 
ON MATCH SET Jadeja.isFound = "true" 
RETURN Jadeja 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Match Set

結果

執行後,您將獲得以下結果。如前所述,由於沒有具有指定詳細資訊的節點,因此 Neo4j 建立了它以及屬性isFound,如下面的螢幕截圖所示。

Oncreate Result

合併關係

就像節點一樣,您也可以使用 MERGE 子句合併關係。

示例

以下是一個使用 Neo4j 中的 MATCH 子句合併關係的 Cypher 查詢示例。此查詢嘗試在節點“ind”(標籤:Country & name:India)和 ICC13(標籤:Tournament & name:ICC Champions Trophy 2013)之間合併一個名為WINNERS_OF的關係。

由於此類關係不存在,因此 Neo4j 會建立一個關係。

MATCH (a:Country), (b:Tournament) 
   WHERE a.name = "India" AND b.name = "ICC Champions Trophy 2013" 
   MERGE (a)-[r:WINNERS_OF]->(b) 
RETURN a, b 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Winners List

結果

執行後,您將獲得以下結果。由於指定的關聯不存在於資料庫中,因此 Neo4j 建立了一個關聯,如下面的螢幕截圖所示。

Relationship Merge

同樣,您也可以合併多個關係和無向關係。

Neo4j - Set 語句

使用 Set 子句,您可以向現有的節點或關係新增新的屬性,以及新增或更新現有的屬性值。

在本節中,我們將討論如何 -

  • 設定屬性
  • 刪除屬性
  • 設定多個屬性
  • 在節點上設定標籤
  • 在節點上設定多個標籤

設定屬性

使用 SET 子句,您可以在節點中建立一個新屬性。

語法

以下是設定屬性的語法。

MATCH (node:label{properties . . . . . . . . . . . . . . }) 
SET node.property = value 
RETURN node

示例

在繼續示例之前,首先建立一個名為 Dhawan 的節點,如下所示。

CREATE (Dhawan:player{name: "shikar Dhawan", YOB: 1985, POB: "Delhi"}) 

以下是一個建立名為“highestscore”且值為“187”的屬性的 Cypher 查詢示例。

MATCH (Dhawan:player{name: "shikar Dhawan", YOB: 1985, POB: "Delhi"}) 
SET Dhawan.highestscore = 187 
RETURN Dhawan

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URLhttps://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Match Player

結果

執行後,您將獲得以下結果。在這裡,您可以觀察到在名為“Dhawan”的節點中建立了一個鍵值對 highestscore/187 的屬性。

Key Value

刪除屬性

您可以透過傳遞NULL作為值來刪除現有屬性。

語法

以下是使用 SET 子句從節點中刪除屬性的語法。

MATCH (node:label {properties}) 
SET node.property = NULL 
RETURN node 

示例

在繼續示例之前,首先建立一個節點“jadeja”,如下所示。

Create (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})

以下是一個使用 SET 子句從該節點中刪除名為 POB 的屬性的 Cypher 查詢示例,如下所示。

MATCH (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
SET Jadeja.POB = NULL 
RETURN Jadeja 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Remove property

結果

執行後,您將獲得以下結果。在這裡,您可以觀察到名為POB的變數已被刪除。

Deleted POB

設定多個屬性

同樣,您可以使用 Set 子句在節點中建立多個屬性。為此,您需要用逗號分隔這些鍵值對。

語法

以下是使用 SET 子句在節點中建立多個屬性的語法。

MATCH (node:label {properties}) 
SET node.property1 = value, node.property2 = value 
RETURN node 

示例

以下是一個使用 Neo4j 中的 SET 子句在節點中建立多個屬性的 Cypher 查詢示例。

MATCH (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988})  
SET Jadeja.POB: "NavagamGhed", Jadeja.HS = "90" 
RETURN Jadeja

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Multiple Properties

結果

執行後,您將獲得以下結果。在這裡,您可以觀察到名為 POB 和 HS 的屬性已被建立。

Executing Properties

在節點上設定標籤

您可以使用 SET 子句為現有節點設定標籤。

語法

以下是為現有節點設定標籤的語法。

MATCH (n {properties . . . . . . . }) 
SET n :label 
RETURN n 

示例

在繼續示例之前,首先建立一個節點“Anderson”,如下所示。

CREATE (Anderson {name: "James Anderson", YOB: 1982, POB: "Burnely"})

以下是一個使用 SET 子句在節點上設定標籤的 Cypher 查詢示例。此查詢將標籤“player”新增到節點 Anderson 並返回它。

MATCH (Anderson {name: "James Anderson", YOB: 1982, POB: "Burnely"}) 
SET Anderson: player 
RETURN Anderson 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Label Node

結果

執行後,您將獲得以下結果。在這裡,您可以觀察到名為“player”的標籤已新增到節點中。

Added Player

在節點上設定多個標籤

您可以使用 SET 子句為現有節點設定多個標籤。在這裡,您需要用冒號“:”分隔標籤。

語法

以下是使用 SET 子句為現有節點設定多個標籤的語法。

MATCH (n {properties . . . . . . . }) 
SET n :label1:label2 
RETURN n 

示例

在繼續示例之前,首先建立一個名為“Ishant”的節點,如下所示。

CREATE (Ishant {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 

以下是一個使用 SET 子句在節點上建立多個標籤的 Cypher 查詢示例。

MATCH (Ishant {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 
SET Ishant: player:person 
RETURN Ishant 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Multi Label

結果

執行後,您將獲得以下結果。在這裡,您可以觀察到兩個標籤 - person 和 player - 已新增到名為Ishant的節點中。

Ishant Player

Neo4j - Delete 語句

您可以使用 DELETE 子句從資料庫中刪除節點和關係。

刪除所有節點和關係

以下是使用 DELETE 子句刪除資料庫中所有節點和關係的查詢。

查詢

MATCH (n) DETACH DELETE n

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Detach Match

這將刪除 Neo4j 資料庫中的所有節點和關係,並使其為空。

刪除特定節點

要刪除特定節點,您需要在上述查詢中“n”的位置指定節點的詳細資訊。

語法

以下是使用 DELETE 子句從 Neo4j 刪除特定節點的語法。

MATCH (node:label {properties . . . . . . . . . .  }) 
DETACH DELETE node

示例

在繼續示例之前,請在 Neo4j 資料庫中建立一個名為“Ishant”的節點,如下所示。

CREATE (Ishant:player {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 

以下是一個示例 Cypher 查詢,它使用 DELETE 子句刪除上面建立的節點。

MATCH (Ishant:player {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 
DETACH DELETE Ishant

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Particular Node

結果

執行後,您將獲得以下結果。在這裡您可以觀察到指定的節點已被刪除。

Deleted Node

Neo4j - Remove 語句

REMOVE 子句用於從圖元素(節點或關係)中刪除屬性和標籤。

Neo4j CQL DELETE 和 REMOVE 命令之間的主要區別在於 -

  • DELETE 操作用於刪除節點和關聯的關係。
  • REMOVE 操作用於刪除標籤和屬性。

刪除屬性

您可以使用 MATCH 以及 REMOVE 子句刪除節點的屬性。

語法

以下是使用 REMOVE 子句刪除節點屬性的語法。

MATCH (node:label{properties . . . . . . . }) 
REMOVE node.property 
RETURN node 

示例

在繼續示例之前,請建立一個名為Dhoni的節點,如下所示。

CREATE (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"})

以下是一個示例 Cypher 查詢,用於使用 REMOVE 子句刪除上面建立的節點。

MATCH (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) 
REMOVE Dhoni.POB 
RETURN Dhoni 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Remove Ranchi

結果

執行後,您將獲得以下結果。在這裡,您可以觀察到名為 POB 的節點已被刪除。

Remove Property Result

從節點中刪除標籤

與屬性類似,您還可以使用 remove 子句從現有節點中刪除標籤。

語法

以下是從節點中刪除標籤的語法。

MATCH (node:label {properties . . . . . . . . . . . }) 
REMOVE node:label 
RETURN node 

示例

以下是一個示例 Cypher 查詢,用於使用 remove 子句從現有節點中刪除標籤。

MATCH (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) 
REMOVE Dhoni:player 
RETURN Dhoni 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Remove Player

結果

執行後,您將獲得以下結果。在這裡,您可以觀察到標籤已從節點中刪除。

Remove Result

刪除多個標籤

您還可以從現有節點中刪除多個標籤。

語法

以下是從節點中刪除多個標籤的語法。

MATCH (node:label1:label2 {properties . . . . . . . . }) 
REMOVE node:label1:label2 
RETURN node

示例

在繼續示例之前,請建立一個名為 Ishant 的節點,如下所示。

CREATE (Ishant:player:person {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 

以下是一個示例 Cypher 查詢,用於從節點中刪除多個標籤。

MATCH (Ishant:player:person {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 
REMOVE Ishant:player:person 
RETURN Ishant 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Remove Multi Label

結果

執行後,您將獲得以下結果。在這裡,您可以觀察到指定的標籤已從節點中刪除。

Multi Label Result

Neo4j - Foreach 語句

FOREACH 子句用於更新列表中的資料,無論是路徑的元件還是聚合的結果。

語法

以下是 FOREACH 子句的語法。

MATCH p = (start node)-[*]->(end node) 
WHERE start.node = "node_name" AND end.node = "node_name" 
FOREACH (n IN nodes(p)| SET n.marked = TRUE) 

示例

在繼續示例之前,請在 Neo4j 資料庫中建立一個名為p的路徑,如下所示。

CREATE p = (Dhawan {name:"Shikar Dhawan"})-[:TOPSCORRER_OF]->(Ind{name: 
   "India"})-[:WINNER_OF]->(CT2013{name: "Champions Trophy 2013"}) 
RETURN p 

以下是一個示例 Cypher 查詢,它使用 FOREACH 子句向路徑上的所有節點新增屬性。

MATCH p = (Dhawan)-[*]->(CT2013) 
   WHERE Dhawan.name = "Shikar Dhawan" AND CT2013.name = "Champions Trophy 2013" 
FOREACH (n IN nodes(p)| SET n.marked = TRUE)

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

For each

結果

執行後,您將獲得以下結果。

Set Properties

驗證

要驗證節點的建立,請在美元提示符中鍵入並執行以下查詢。

MATCH (n) RETURN n 

此查詢返回資料庫中的所有節點(我們將在後續章節中詳細討論此查詢)。

執行後,此查詢將顯示建立的節點,如下面的螢幕截圖所示。

Created Result

Neo4j - Match 語句

在本節中,我們將學習 Match 子句以及使用此子句可以執行的所有功能。

使用 Match 獲取所有節點

使用 Neo4j 的 MATCH 子句,您可以檢索 Neo4j 資料庫中的所有節點。

示例

在繼續示例之前,請建立 3 個節點和 2 個關係,如下所示。

CREATE (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) 
CREATE (Ind:Country {name: "India", result: "Winners"}) 
CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"}) 
CREATE (Ind)-[r1:WINNERS_OF {NRR:0.938 ,pts:6}]->(CT2013) 

CREATE(Dhoni)-[r2:CAPTAIN_OF]->(Ind)  
CREATE (Dhawan:player{name: "shikar Dhawan", YOB: 1995, POB: "Delhi"}) 
CREATE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})  

CREATE (Dhawan)-[:TOP_SCORER_OF {Runs:363}]->(Ind) 
CREATE (Jadeja)-[:HIGHEST_WICKET_TAKER_OF {Wickets:12}]->(Ind) 

以下查詢返回 Neo4j 資料庫中的所有節點。

MATCH (n) RETURN n 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Match Return

結果

執行後,您將獲得以下結果。

Executing Result

獲取特定標籤下的所有節點

使用 match 子句,您可以獲取特定標籤下的所有節點。

語法

以下是獲取特定標籤下所有節點的語法。

MATCH (node:label) 
RETURN node 

示例

以下是一個示例 Cypher 查詢,它返回資料庫中標籤為player的所有節點。

MATCH (n:player) 
RETURN n 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

N Player

結果

執行後,您將獲得以下結果。

Specific Label

按關係匹配

您可以使用 MATCH 子句根據關係檢索節點。

語法

以下是使用 MATCH 子句根據關係檢索節點的語法。

MATCH (node:label)<-[: Relationship]-(n) 
RETURN n 

示例

以下是一個示例 Cypher 查詢,用於使用 MATCH 子句根據關係檢索節點。

MATCH (Ind:Country {name: "India", result: "Winners"})<-[: TOP_SCORER_OF]-(n) 
RETURN n.name 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Top Scorer

結果

執行後,您將獲得以下結果。

Match Relationship

刪除所有節點

您可以使用 MATCH 子句刪除所有節點。

查詢

以下是刪除 Neo4j 中所有節點的查詢。

MATCH (n) detach delete n 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Desired Press

結果

執行後,您將獲得以下結果。

Deleted Relationship

Neo4j - Optional Match 語句

OPTIONAL MATCH 子句用於搜尋其中描述的模式,同時對模式中缺少的部分使用空值。

OPTIONAL MATCH 類似於 match 子句,唯一的區別在於它返回模式中缺少部分的結果為空。

語法

以下是帶關係的 OPTIONAL MATCH 的語法。

MATCH (node:label {properties. . . . . . . . . . . . . .}) 
OPTIONAL MATCH (node)-->(x) 
RETURN x

示例

以下是一個示例 Cypher 查詢,它嘗試從節點 ICCT2013 檢索關係。由於沒有此類節點,因此它返回 null。

MATCH (a:Tornament {name: "ICC Champions Trophy 2013"}) 
OPTIONAL MATCH (a)-->(x) 
RETURN x 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Optional Match

結果

執行後,您將獲得以下結果。在這裡您可以觀察到,由於沒有找到所需模式的匹配項,Neo4j 返回了 null。

Pattern Required

Neo4j - Where 語句

與 SQL 一樣,Neo4j CQL 在 CQL MATCH 命令中提供了 WHERE 子句來過濾 MATCH 查詢的結果。

語法

以下是 WHERE 子句的語法。

MATCH (label)  
WHERE label.country = "property" 
RETURN label 

示例

在繼續示例之前,請在資料庫中建立五個節點,如下所示。

CREATE(Dhawan:player{name:"shikar Dhawan", YOB: 1985, runs:363, country: "India"}
CREATE(Jonathan:player{name:"Jonathan Trott", YOB:1981, runs:229, country:"South Africa"}
CREATE(Sangakkara:player{name:"Kumar Sangakkara", YOB:1977, runs:222, 
   country:"Srilanka"})
CREATE(Rohit:player{name:"Rohit Sharma", YOB: 1987, runs:177, country:"India"})
CREATE(Virat:player{name:"Virat Kohli", YOB: 1988, runs:176, country:"India"})
CREATE(Ind:Country {name: "India", result: "Winners"})

以下是一個示例 Cypher 查詢,它使用 WHERE 子句返回屬於印度(節點)的所有球員(節點)。

MATCH (player)  
WHERE player.country = "India" 
RETURN player 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Where Player

結果

執行後,您將獲得以下結果。

Where Result

帶多個條件的 WHERE 子句

您還可以使用 WHERE 子句驗證多個條件。

語法

以下是使用 WHERE 子句在 Neo4j 中帶有多個條件的語法。

MATCH (emp:Employee)  
WHERE emp.name = 'Abc' AND emp.name = 'Xyz' 
RETURN emp 

示例

以下是一個示例 Cypher 查詢,它使用兩個條件過濾 Neo4j 資料庫中的節點。

MATCH (player)  
WHERE player.country = "India" AND player.runs >=175 
RETURN player 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Return Player

結果

執行後,您將獲得以下結果。

Condition Result

使用關係與 Where 子句

您還可以使用 Where 子句使用關係過濾節點。

示例

假設我們在資料庫中具有以下圖形。

Assumed Database

以下是一個示例 Cypher 查詢,用於使用 WHERE 子句檢索印度的最佳得分手,如下所示。

MATCH (n) 
WHERE (n)-[: TOP_SCORER_OF]->( {name: "India", result: "Winners"}) 
RETURN n 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Winners Result

結果

執行後,您將獲得以下結果。在這裡您可以觀察到 Neo4j 返回了節點,該節點與名為 India 的節點具有關係 TOP_SCORER_OF。

Returned Node

Neo4j - Count 函式

假設我們在資料庫中建立了一個圖形,其詳細資訊如下。

Count Database

計數

count() 函式用於計算行數。

語法

以下是 count 函式的語法。

MATCH (n { name: 'A' })-->(x) 
RETURN n, count(*) 

示例

以下是一個示例 Cypher 查詢,演示了count() 函式的用法。

Match(n{name: "India", result: "Winners"})--(x)  
RETURN n, count(*) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Count Match

結果

執行後,您將獲得以下結果。

Count Result

分組計數

COUNT 子句也用於計算關係型別的組。

示例

以下是一個示例 Cypher 查詢,它計算並返回參與每個關係的節點數。

Match(n{name: "India", result: "Winners"})-[r]-(x)  
RETURN type (r), count(*) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Group Count

Neo4j - Return 語句

RETURN 子句用於在 Neo4j 中返回節點、關係和屬性。在本節中,我們將學習如何 -

  • 返回節點
  • 返回多個節點
  • 返回關係
  • 返回屬性
  • 返回所有元素
  • 返回帶有列別名的變數

返回節點

您可以使用 RETURN 子句返回節點。

語法

以下是使用 RETURN 子句返回節點的語法。

Create (node:label {properties}) 
RETURN node 

示例

在繼續示例之前,請建立 3 個節點和 2 個關係,如下所示。

Create (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) 
CREATE (Ind:Country {name: "India", result: "Winners"}) 
CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"}) 
CREATE (Ind)-[r1:WINNERS_OF {NRR:0.938 ,pts:6}]->(CT2013) 
CREATE(Dhoni)-[r2:CAPTAIN_OF]->(Ind) 

以下是一個示例 Cypher 查詢,它建立一個名為 Dhoni 的節點並返回它。

Create (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) 
RETURN Dhoni

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Return

結果

執行後,您將獲得以下結果。

Create Player

返回多個節點

您還可以使用 return 子句返回多個節點。

語法

以下是使用 return 子句返回多個節點的語法。

CREATE (Ind:Country {name: "India", result: "Winners"}) 
CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"}) 
RETURN Ind, CT2013 

示例

以下是一個示例 Cypher 查詢,用於使用 return 子句返回多個節點。

CREATE (Ind:Country {name: "India", result: "Winners"}) 
CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"}) 
RETURN Ind, CT2013 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Multi Node

結果

執行後,您將獲得以下結果。在這裡您可以觀察到 Neo4j 返回了 2 個節點。

Create Tornament

返回關係

您還可以使用 Return 子句返回關係。

語法

以下是使用 RETURN 子句返回關係的語法。

CREATE (node1)-[Relationship:Relationship_type]->(node2) 
RETURN Relationship 

示例

以下是一個示例 Cypher 查詢,它建立兩個關係並返回它們。

CREATE (Ind)-[r1:WINNERS_OF {NRR:0.938 ,pts:6}]->(CT2013) 
CREATE(Dhoni)-[r2:CAPTAIN_OF]->(Ind) 
RETURN r1, r2 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Relationship Return

結果

執行後,您將獲得以下結果。

Create Winners

返回屬性

您還可以使用 RETURN 子句返回屬性。

語法

以下是使用 RETURN 子句返回屬性的語法。

Match (node:label {properties . . . . . . . . . . }) 
Return node.property 

示例

以下是一個示例 Cypher 查詢,用於返回節點的屬性。

Match (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) 
Return Dhoni.name, Dhoni.POB 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Property Return

結果

執行後,您將獲得以下結果。

Streaming

返回所有元素

您可以使用 RETURN 子句返回 Neo4j 資料庫中的所有元素。

示例

以下是一個示例 Cypher 查詢,用於返回資料庫中的所有元素。

Match p = (n {name: "India", result: "Winners"})-[r]-(x)  
RETURN * 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

All Elements

結果

執行後,您將獲得以下結果。

All Elements Result

返回帶有列別名的變數

您可以使用 Neo4j 中的 RETURN 子句返回帶有別名的特定列。

示例

以下是一個示例 Cypher 查詢,它將列 POB 返回為出生日期。

Match (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) 
Return Dhoni.POB as Place Of Birth

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Return Column

結果

執行後,您將獲得以下結果。

Column Alias

Neo4j - Order By 語句

您可以使用 ORDER BY 子句按順序排列結果資料。

語法

以下是 ORDER BY 子句的語法。

MATCH (n)  
RETURN n.property1, n.property2 . . . . . . . .  
ORDER BY n.property

示例

在繼續示例之前,請在 Neo4j 資料庫中建立 5 個節點,如下所示。

CREATE(Dhawan:player{name:"shikar Dhawan", YOB: 1985, runs:363, country: "India"})
CREATE(Jonathan:player{name:"Jonathan Trott", YOB:1981, runs:229, country:"South Africa"})
CREATE(Sangakkara:player{name:"Kumar Sangakkara", YOB:1977, runs:222, country:"Srilanka"})
CREATE(Rohit:player{name:"Rohit Sharma", YOB: 1987, runs:177, country:"India"})
CREATE(Virat:player{name:"Virat Kohli", YOB: 1988, runs:176, country:"India"})

以下是一個示例 Cypher 查詢,它使用 ORDERBY 子句按球員得分的順序返回上面建立的節點。

MATCH (n)  
RETURN n.name, n.runs 
ORDER BY n.runs 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Return Name

結果

執行後,您將獲得以下結果。

Records

按多個屬性對節點進行排序

您可以使用ORDEYBY子句根據多個屬性對節點進行排序。

語法

以下是使用 ORDERBY 子句根據多個屬性對節點進行排序的語法。

MATCH (n) 
RETURN n 
ORDER BY n.age, n.name 

示例

以下是一個示例 Cypher 查詢,它根據屬性 - 執行和國家/地區對本章前面建立的節點進行排序。

MATCH (n) 
RETURN n.name, n.runs, n.country 
ORDER BY n.runs, n.country

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Order By Runs

結果

執行後,您將獲得以下結果。

Ordering Nodes

按降序對節點排序

您可以使用ORDERBY子句按降序排列資料庫中的節點。

語法

以下是排列資料庫中節點的語法。

MATCH (n) 
RETURN n 
ORDER BY n.name DESC 

示例

以下是一個示例 Cypher 查詢,它使用 ORDERBY 子句按降序排列資料庫中的節點。

MATCH (n)  
RETURN n.name, n.runs 
ORDER BY n.runs DESC 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Descending Order

結果

執行後,您將獲得以下結果。

Order By

Neo4j - Limit 語句

limit 子句用於限制輸出中的行數。

語法

以下是 LIMIT 子句的語法。

MATCH (n) 
RETURN n 
ORDER BY n.name 
LIMIT 3 

示例

在繼續示例之前,請在 Neo4j 資料庫中建立 5 個節點,如下所示。

CREATE(Dhawan:player{name:"shikar Dhawan", YOB: 1985, runs:363, country: "India"})
CREATE(Jonathan:player{name:"Jonathan Trott", YOB:1981, runs:229, country:"South Africa"})
CREATE(Sangakkara:player{name:"Kumar Sangakkara", YOB:1977, runs:222, country:"Srilanka"})
CREATE(Rohit:player{name:"Rohit Sharma", YOB: 1987, runs:177, country:"India"})
CREATE(Virat:player{name:"Virat Kohli", YOB: 1988, runs:176, country:"India"})

以下是一個示例 Cypher 查詢,它按降序返回上面建立的節點,並將結果中的記錄限制為 3 個。

MATCH (n)  
RETURN n.name, n.runs 
ORDER BY n.runs DESC 
LIMIT 3 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Limit

結果

執行後,您將獲得以下結果。

Limit Result

帶表示式的 Limit

您還可以將 LIMIT 子句與表示式一起使用。

示例

以下是一個示例 Cypher 查詢,它使用表示式限制記錄。

MATCH (n) 
RETURN n.name, n.runs 
ORDER BY n.runs DESC 
LIMIT toInt(3 * rand())+ 1 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Expression Limit

結果

執行後,您將獲得以下結果。

Expression Result

Neo4j - Skip 語句

SKIP 子句用於定義從哪一行開始包含輸出中的行。

示例

在繼續示例之前,請建立 5 個節點,如下所示。

CREATE(Dhawan:player{name:"shikar Dhawan", YOB: 1985, runs:363, country: "India"})
CREATE(Jonathan:player{name:"Jonathan Trott", YOB:1981, runs:229, country:"South Africa"})
CREATE(Sangakkara:player{name:"Kumar Sangakkara", YOB:1977, runs:222, country:"Srilanka"})
CREATE(Rohit:player{name:"Rohit Sharma", YOB: 1987, runs:177, country:"India"})
CREATE(Virat:player{name:"Virat Kohli", YOB: 1988, runs:176, country:"India"})

以下是一個示例 Cypher 查詢,它返回資料庫中的所有節點,跳過前 3 個節點。

MATCH (n)  
RETURN n.name, n.runs 
ORDER BY n.runs DESC 
SKIP 3 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Skip

結果

執行後,您將獲得以下結果。

Skip Result

使用表示式跳過

您可以使用表示式跳過結果的記錄。

示例

以下是一個示例 Cypher 查詢,它將 SKIP 子句與表示式一起使用。

MATCH (n)  
RETURN n.name, n.runs 
ORDER BY n.runs DESC 
SKIP toInt (2*rand())+ 1 

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Skip Expression

結果

執行後,您將獲得以下結果。

Skip Expression Result

Neo4j - With 語句

您可以使用 WITH 子句將查詢部件連結在一起。

語法

以下是 WITH 子句的語法。

MATCH (n) 
WITH n 
ORDER BY n.property 
RETURN collect(n.property) 

示例

以下是一個示例 Cypher 查詢,演示了 WITH 子句的用法。

MATCH (n) 
WITH n 
ORDER BY n.name DESC LIMIT 3 
RETURN collect(n.name) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Return Collect

結果

執行後,您將獲得以下結果。

Collect Result

Neo4j - Unwind 語句

unwind 子句用於將列表解開成一系列行。

示例

以下是一個示例 Cypher 查詢,它解開一個列表。

UNWIND [a, b, c, d] AS x 
RETURN x 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Return Collect

結果

執行後,您將獲得以下結果。

Collect Result

Neo4j - 字串函式

與 SQL 類似,Neo4J CQL 提供了一組字串函式,可以在 CQL 查詢中使用它們來獲取所需的結果。

在這裡,我們將討論一些重要且常用的函式。

字串函式列表

以下是 Neo4j 中常用的字串函式列表。

序號 函式及描述
1 UPPER

用於將所有字母轉換為大寫字母。

2 LOWER

用於將所有字母轉換為小寫字母。

3 SUBSTRING

用於獲取給定字串的子字串。

4 Replace

用於將字串中的一個子字串替換為另一個給定的子字串。

Neo4j - 聚合函式

與 SQL 類似,Neo4j CQL 提供了一些聚合函式,可以在 RETURN 子句中使用。它類似於 SQL 中的 GROUP BY 子句。

我們可以在 MATCH 命令中使用 RETURN + 聚合函式來處理一組節點並返回一些聚合值。

聚合函式列表

以下是 Neo4j 中的聚合函式列表。

序號 函式及描述
1 COUNT

返回 MATCH 命令返回的行數。

2 MAX

從 MATCH 命令返回的一組行中返回最大值。

3 MIN

從 MATCH 命令返回的一組行中返回最小值。

4 SUM

返回 MATCH 命令返回的所有行的總和。

5 AVG

返回 MATCH 命令返回的所有行的平均值。

Neo4j - 備份與恢復

在即時應用程式中,我們應該定期備份應用程式資料庫,以便在任何故障點恢復到某個工作狀態。

此規則適用於 RDBMS 和 NoSQL 資料庫。

在本節中,我們將討論兩個重要的 DBA 任務。

  • 如何備份 Neo4j 資料庫。
  • 如何將 Neo4j 資料庫恢復到特定備份。

注意 - 這些步驟僅適用於 Windows 作業系統。我們應該使用類似的命令在其他作業系統中執行相同的步驟。

Neo4j 資料庫備份

步驟 1 - 使用以下路徑點選“Neo4j Community”:

Windows“開始”按鈕 →“所有程式” →“Neo4j Community” →“Neo4j Community”

預設情況下,它選擇c:\Users\[使用者名稱]\Documents\Neo4j\default.graphdb。但是如果我們希望,可以將路徑更改到不同的目錄。

步驟 2 - 這裡我們已更改到 Neo4j 資料庫資料夾。

C:\Ne04j2.0db

Community Setting

步驟 3 - 點選“啟動”按鈕。

Browse Stop

伺服器啟動後,我們可以觀察到 Neo4j 資料庫檔案已生成到指定的目錄。

Observed Directory

在進行資料庫備份之前,首先要做的事情是關閉 Neo4j 資料庫伺服器。

步驟 4 - 點選“停止”按鈕關閉伺服器。

Community Setting

Neo4j 資料庫檔案位於 C:\Ne04j2.0db

Observe Directory

步驟 5 - 開啟命令提示符。

Command Prompt

步驟 6 - 在 C:\Neo4j 中建立一個資料夾“Neo4jDbBackup-01”(這可以是檔案系統中的任何位置)。

mkdir C:\Neo4j\Neo4jDbBackup-01 

Cmd Mkdir

它在指定的檔案系統位置“C:\Neo4j\”中建立了一個新資料夾“Neo4jDbBackup-01”。

New Directory

步驟 7 - 輸入以下命令並按 Enter 鍵。

copy C:\Ne04j2.0db C:\Neo4j\Neo4jDbBackup-01 

Backup Command

Copied Statements

這意味著我們的檔案已複製到所需的目的地資料夾。訪問該資料夾並觀察該資料夾是否包含我們的資料庫檔案。

Database files

步驟 8 - 使用任何 Windows 壓縮/解壓縮工具(如 WinZip、7 Zip 或 WinRAR)壓縮我們的資料庫資料夾。

ZIP Folder

步驟 9 - 現在已建立 Neo4jDbBackup-01.zip 檔案。如果檔案系統中存在任何記憶體限制,則刪除“C:\Neo4j\”中的“Neo4jDbBackup-01”資料夾。

Memory Constraint

Neo4j 資料庫恢復

步驟 1 - 關閉資料庫伺服器。請參考前面的步驟關閉伺服器。

Community Setting

步驟 2 - 清空當前資料庫資料夾。

Current Database

步驟 3 - 使用任何 Windows 壓縮/解壓縮工具(如 WinZip、7 Zip 或 WinRar)解壓縮我們的備份資料夾。

Extracting Files

步驟 4 - 開啟命令提示符並執行以下命令。

Copy C:\Neo4j\Neo4jDbBackup-01 C:\Ne04j2.0db 

Execute

現在我們可以觀察到我們的資料庫資料夾包含工作備份檔案。

步驟 5 - 點選“啟動”按鈕啟動伺服器。

Community Setting

Browse Stop

步驟 6 - 執行一些 MATCH + RETURN 命令以驗證我們是否已正確恢復資料庫。

Neo4j - 索引

Neo4j SQL 支援節點或關係屬性上的索引以提高應用程式的效能。我們可以在所有具有相同標籤名稱的節點的屬性上建立索引。

我們可以在 MATCH 或 WHERE 或 IN 運算子上使用這些索引列來提高 CQL 命令的執行效率。

在本章中,我們將討論如何:

  • 建立索引
  • 刪除索引

建立索引

Neo4j CQL 提供“CREATE INDEX”命令在節點或關係屬性上建立索引。

語法

以下是 Neo4j 中建立索引的語法。

CREATE INDEX ON:label (node) 

示例

在繼續示例之前,請建立如下所示的節點 Dhawan。

CREATE (Dhawan:player{name: "shikar Dhawan", YOB: 1995, POB: "Delhi"})

以下是在 Neo4j 中在節點 Dhawan 上建立索引的示例 Cypher 查詢。

CREATE INDEX ON:player(Dhawan) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Index On

結果

執行後,您將獲得以下結果。

Added Index

刪除索引

Neo4j CQL 提供“DROP INDEX”命令刪除節點或關係屬性的現有索引。

語法

以下是 Neo4j 中建立索引的語法。

DROP INDEX ON:label(node) 

示例

以下是在 Neo4j 中在名為“Dhawan”的節點上建立索引的示例 Cypher 查詢。

DROP INDEX ON:player(Dhawan) 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Drop Index

結果

執行後,您將獲得以下結果。

Remove Index

Neo4j - 建立唯一約束

在 Neo4j 資料庫中,CQL CREATE 命令始終建立一個新的節點或關係,這意味著即使使用相同的值,它也會插入新行。根據我們的應用程式要求,對於某些節點或關係,我們必須避免這種重複。為此,我們應該使用一些資料庫約束在一個或多個節點或關係屬性上建立規則。

與 SQL 類似,Neo4j 資料庫也支援節點或關係屬性上的 UNIQUE 約束。UNIQUE 約束用於避免重複記錄並強制執行資料完整性規則。

建立 UNIQUE 約束

Neo4j CQL 提供“CREATE CONSTRAINT”命令在節點或關係屬性上建立唯一約束。

語法

以下是 Neo4j 中建立 UNIQUE 約束的語法。

MATCH (root {name: "Dhawan"}) 
CREATE UNIQUE (root)-[:LOVES]-(someone) 
RETURN someone 

示例

在繼續示例之前,請建立如下所示的 4 個節點。

CREATE(Dhawan:player{id:001, name: "shikar Dhawan", YOB: 1995, POB: "Delhi"}) 
CREATE(Jonathan:player {id:002, name: "Jonathan Trott", YOB: 1981, POB: "CapeTown"}) 
CREATE(Sangakkara:player {id:003, name: "Kumar Sangakkara", YOB: 1977, POB: "Matale"}) 
CREATE(Rohit:player {id:004, name: "Rohit Sharma", YOB: 1987, POB: "Nagpur"}) 
CREATE(Virat:player {id:005, name: "Virat Kohli", YOB: 1988, POB: "Delhi"}) 

以下是在 Neo4j 中使用屬性 id 建立 UNIQUE 約束的示例 Cypher 查詢。

CREATE CONSTRAINT ON (n:player) ASSERT n.id IS UNIQUE

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Create Unique

結果

執行後,您將獲得以下結果。

Added Constraint

驗證

現在,嘗試新增另一個具有冗餘 id 值的節點。這裡,我們嘗試建立一個 id 為002的節點。

CREATE (Jadeja:player {id:002, name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 

如果執行此查詢,將收到如下所示的錯誤訊息。

Node Label Play

Neo4j - 刪除唯一約束

我們已經在上一章中討論了使用示例建立 UNIQUE 約束操作。在本章中,我們將討論使用示例刪除 UNIQUE 約束操作。

Neo4j CQL 提供“DROP CONSTRAINT”命令從節點或關係屬性中刪除現有的唯一約束。

語法

以下是 Neo4j 中刪除 UNIQUE 約束的語法。

DROP CONSTRAINT ON (node:label) 
ASSERT node.id IS UNIQUE 

示例

以下是在 Neo4j 中刪除屬性id上的 UNIQUE 約束的示例 Cypher 查詢。

DROP CONSTRAINT ON (n:player) 
ASSERT n.id IS UNIQUE 

要執行上述查詢,請執行以下步驟 -

步驟 1 - 開啟 Neo4j 桌面應用程式並啟動 Neo4j 伺服器。使用 URL https://:7474/開啟 Neo4j 的內建瀏覽器應用程式,如下面的螢幕截圖所示。

Browser App

步驟 2 - 將所需的查詢複製貼上到美元提示符中,然後按下面的螢幕截圖中突出顯示的播放按鈕(以執行查詢)。

Drop Constraint

結果

執行後,您將獲得以下結果。

Removed Constraint
廣告