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.ac.cn/ 访问 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
广告

© . All rights reserved.