Neo4j – 快速指南
Neo4j – 快速指南
Neo4j – 概述
Neo4j 是世界领先的开源图形数据库,它使用 Java 技术开发。它具有高度可扩展性和无模式 (NoSQL)。
什么是图数据库?
图是一组对象的图形表示,其中一些对象对通过链接连接。它由两个元素组成——节点(顶点)和关系(边)。
图数据库是用于以图的形式对数据进行建模的数据库。在这里,图的节点描述了实体,而关系描述了这些节点的关联。
流行的图形数据库
Neo4j 是一种流行的图形数据库。其他图形数据库包括 Oracle NoSQL Database、OrientDB、HypherGraphDB、GraphBase、InfiniteGraph 和 AllegroGraph。
为什么是图数据库?
如今,大多数数据以不同对象之间的关系形式存在,而且更多时候,数据之间的关系比数据本身更有价值。
关系数据库存储高度结构化的数据,这些数据有多个记录存储相同类型的数据,因此它们可用于存储结构化数据,并且不存储数据之间的关系。
与其他数据库不同,图数据库将关系和连接存储为一流的实体。
与其他数据库相比,图数据库的数据模型更简单,并且可以与 OLTP 系统一起使用。它们提供事务完整性和操作可用性等功能。
RDBMS 与图形数据库
下表比较了关系数据库和图数据库。
Sr.No | 关系型数据库管理系统 | 图数据库 |
---|---|---|
1 | 表 | 图表 |
2 | 行 | 节点 |
3 | 列和数据 | 属性及其值 |
4 | 约束 | 关系 |
5 | 加入 | 遍历 |
Neo4j的优势
以下是 Neo4j 的优点。
-
灵活的数据模型– Neo4j 提供了一个灵活简单但功能强大的数据模型,可以根据应用程序和行业轻松更改。
-
实时洞察– Neo4j 提供基于实时数据的结果。
-
高可用性– Neo4j 对具有事务保证的大型企业实时应用程序高度可用。
-
连接和半结构化数据– 使用 Neo4j,您可以轻松表示连接和半结构化数据。
-
轻松检索– 与其他数据库相比,使用 Neo4j,您不仅可以表示而且可以轻松检索(遍历/导航)连接的数据。
-
Cypher 查询语言– Neo4j 提供了一种声明式查询语言,使用 ascii-art 语法直观地表示图形。这种语言的命令是人类可读的格式,非常容易学习。
-
无连接– 使用 Neo4j,它不需要复杂的连接来检索连接/相关的数据,因为它很容易在没有连接或索引的情况下检索其相邻节点或关系详细信息。
Neo4j 的特点
以下是 Neo4j 的显着特点 –
-
数据模型(灵活模式) – Neo4j 遵循名为本机属性图模型的数据模型。在这里,图包含节点(实体)并且这些节点相互连接(由关系描述)。节点和关系将数据存储在称为属性的键值对中。
在 Neo4j 中,不需要遵循固定模式。您可以根据需要添加或删除属性。它还提供模式约束。
-
ACID 属性– Neo4j 支持完整的 ACID(原子性、一致性、隔离性和持久性)规则。
-
可扩展性和可靠性– 您可以通过增加读/写次数和容量来扩展数据库,而不会影响查询处理速度和数据完整性。Neo4j 还为数据安全性和可靠性提供了复制支持。
-
Cypher 查询语言– Neo4j 提供了一种强大的声明式查询语言,称为 Cypher。它使用 ASCII 艺术来描绘图形。Cypher 易于学习,可用于创建和检索数据之间的关系,而无需使用诸如连接之类的复杂查询。
-
内置 Web 应用程序– Neo4j 提供内置的Neo4j 浏览器Web 应用程序。使用它,您可以创建和查询图形数据。
-
驱动程序– Neo4j 可以使用 –
-
REST API 可与 Java、Spring、Scala 等编程语言一起使用。
-
与 UI MVC 框架(例如 Node JS)一起使用的 Java 脚本。
-
它支持两种 Java API:Cypher API 和 Native Java API 来开发 Java 应用程序。除了这些,您还可以使用其他数据库,例如 MongoDB、Cassandra 等。
-
-
索引– Neo4j 通过使用 Apache Lucence 支持索引。
Neo4j – 数据模型
Neo4j 属性图数据模型
Neo4j 图数据库遵循属性图模型来存储和管理其数据。
以下是属性图模型的主要特征 –
-
该模型表示节点、关系和属性中的数据
-
属性是键值对
-
节点用圆圈表示,关系用箭头键表示
-
关系有方向:单向和双向
-
每个关系包含“起始节点”或“从节点”和“到节点”或“结束节点”
-
节点和关系都包含属性
-
关系连接节点
在属性图数据模型中,关系应该是有方向的。如果我们尝试在没有方向的情况下创建关系,则会抛出错误消息。
在 Neo4j 中,关系也应该是定向的。如果我们尝试创建没有方向的关系,那么 Neo4j 将抛出一条错误消息,指出“关系应该是有方向的”。
Neo4j 图形数据库将其所有数据存储在节点和关系中。我们不需要任何额外的 RRBMS 数据库或任何 SQL 数据库来存储 Neo4j 数据库数据。它以原始格式以图形的形式存储其数据。
Neo4j 使用原生 GPE(图形处理引擎)来处理其原生图形存储格式。
图形数据库数据模型的主要构建块是 –
- 节点
- 关系
- 特性
以下是属性图的简单示例。
在这里,我们使用圆圈表示节点。关系使用箭头表示。关系是有方向的。我们可以用属性(键值对)来表示节点的数据。在这个例子中,我们在节点的圆内表示了每个节点的 Id 属性。
Neo4j – 环境设置
在本章中,我们将讨论如何使用 exe 文件在您的系统中安装 Neo4j。
使用 Windows exe 文件安装 Neo4j 数据库服务器
按照下面给出的步骤将 Neo4j 下载到您的系统中。
第 1 步– 使用https://neo4j.com/访问 Neo4j 官方网站。单击此链接后,您将进入 neo4j 网站的主页。
第 2 步– 如上图所示,该页面的右上角有一个下载按钮。点击它。
第 3 步– 这会将您重定向到下载页面,您可以在其中下载 Neo4j 的社区版和企业版。单击相应的按钮下载该软件的社区版。
第 4 步– 这将带您进入可以下载与不同操作系统兼容的 Neo4j 软件社区版本的页面。下载对应于所需操作系统的文件。
这会将名为neo4j-community_windows-x64_3_1_1.exe的文件下载到您的系统,如下面的屏幕截图所示。
步骤 5 – 双击 exe 文件安装 Neo4j 服务器。
步骤 6 – 接受许可协议并继续安装。完成该过程后,您可以观察到 Neo4j 已安装在您的系统中。
启动服务器
步骤 1 – 单击 Windows 开始菜单并通过单击 Neo4j 的开始菜单快捷方式启动 Neo4j 服务器。
第 2 步– 单击快捷方式后,您将看到 Neo4j 社区版的窗口。默认情况下,它选择 c:\Users\[用户名]\Documents\Neo4j\default.graphdb。如果需要,您可以将路径更改为其他目录。
步骤 3 – 单击“开始”按钮启动 Neo4j 服务器。
服务器启动后,您可以观察到数据库目录已填充,如下面的屏幕截图所示。
使用 Neo4j
正如前几章所讨论的,neo4j 提供了一个内置的浏览应用程序来使用 Neo4j。您可以使用 URL http://localhost:7474/访问 Neo4j
Neo4j – 构建块
Neo4j 图形数据库具有以下构建块 –
- 节点
- 特性
- 关系
- 标签
- 数据浏览器
节点
节点是图的基本单位。它包含具有键值对的属性,如下图所示。
这里,Node Name = “Employee” 并且它包含一组作为键值对的属性。
特性
属性是一个键值对来描述图节点和关系。
Key = Value
其中 Key 是一个字符串,Value 可以使用任何 Neo4j 数据类型表示。
关系
关系是图数据库的另一个主要构建块。它连接两个节点,如下图所示。
这里,Emp 和 Dept 是两个不同的节点。“WORKS_FOR”是 Emp 和 Dept 节点之间的关系。
正如它所表示的那样,从 Emp 到 Dept 的箭头标记,这种关系描述了 –
Emp WORKS_FOR Dept
每个关系包含一个开始节点和一个结束节点。
这里,“Emp”是开始节点,“Dept”是结束节点。
由于此关系箭头标记表示从“Emp”节点到“Dept”节点的关系,因此该关系被称为“传入关系”到“Dept”节点和“传出关系”到“Emp”节点。
像节点一样,关系也可以包含属性作为键值对。
这里,“WORKS_FOR”关系有一个属性作为键值对。
Id = 123
它代表此关系的 ID。
标签
标签将通用名称与一组节点或关系相关联。一个节点或关系可以包含一个或多个标签。我们可以为现有节点或关系创建新标签。我们可以从现有节点或关系中删除现有标签。
从上图中,我们可以观察到有两个节点。
左侧节点有一个标签:“Emp”,右侧节点有一个标签:“Dept”。
这两个节点之间的关系也有一个标签:“WORKS_FOR”。
注意– Neo4j 将数据存储在节点或关系的属性中。
Neo4j 数据浏览器
安装 Neo4j 后,我们可以使用以下 URL 访问 Neo4j 数据浏览器
http://localhost:7474/browser/
Neo4j 数据浏览器用于执行 CQL 命令并查看输出。
在这里,我们需要在美元提示符下执行所有 CQL 命令:“$”
在美元符号后键入命令,然后单击“执行”按钮以运行您的命令。
它与 Neo4j 数据库服务器交互,在美元提示下方检索并显示结果。
使用“VI View”按钮以图表格式查看结果。上图以“UI 视图”格式显示结果。
使用“网格视图”按钮在网格视图中查看结果。下图以“网格视图”格式显示了相同的结果。
当我们使用“网格视图”查看我们的查询结果时,我们可以将它们以两种不同的格式导出到一个文件中。
CSV
单击“导出 CSV”按钮以 csv 文件格式导出结果。
JSON
单击“导出 JSON”按钮以 JSON 文件格式导出结果。
但是,如果我们使用“UI View”来查看我们的查询结果,我们只能以一种格式将它们导出到一个文件中: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的阅读条款Ç ypher Q uery大号anguage –
Sr.No | 阅读条款 | 用法 |
---|---|---|
1 | 比赛 | 该子句用于搜索具有指定模式的数据。 |
2 | 可选配 | 这与 match 相同,唯一的区别是它可以在缺少模式部分的情况下使用空值。 |
3 | 在哪里 | 此子句 id 用于向 CQL 查询添加内容。 |
4 | 开始 | 该子句用于通过遗留索引找到起点。 |
5 | 加载 CSV | 该子句用于从 CSV 文件导入数据。 |
以下是的Neo4j的写入条款Ç ypher Q uery大号anguage –
Sr.No | 写条款 | 用法 |
---|---|---|
1 | 创造 | 该子句用于创建节点、关系和属性。 |
2 | 合并 | 该子句验证图中是否存在指定的模式。如果不是,它会创建模式。 |
3 | 放 | 该子句用于更新节点上的标签、节点上的属性和关系。 |
4 | 删除 | 该子句用于从图中删除节点和关系或路径等。 |
5 | 去掉 | 该子句用于从节点和关系中删除属性和元素。 |
6 | FOREACH | 此类用于更新列表中的数据。 |
7 | 创造独一无二 | 使用 CREATE 和 MATCH 子句,您可以通过匹配现有模式并创建缺失的模式来获得唯一的模式。 |
8 | 使用 Cypher 导入 CSV 文件 | 使用加载 CSV,您可以从 .csv 文件导入数据。 |
以下是的Neo4j的一般条款。Ç ypher Q uery大号anguage –
Sr.No | 一般条款 | 用法 |
---|---|---|
1 | 返回 | 此子句用于定义要包含在查询结果集中的内容。 |
2 | 订购者 | 此子句用于按顺序排列查询的输出。它与RETURN或WITH子句一起使用。 |
3 | 限制 | 该子句用于将结果中的行限制为特定值。 |
4 | 跳过 | 此子句用于定义从哪一行开始,包括输出中的行。 |
5 | 和 | 该子句用于将查询部分链接在一起。 |
6 | 放松 | 此子句用于将列表扩展为行序列。 |
7 | 联盟 | 该子句用于组合多个查询的结果。 |
8 | 称呼 | 该子句用于调用部署在数据库中的过程。 |
Neo4j CQL 函数
以下是常用的 Neo4j CQL 函数 –
Sr.No | CQL 函数 | 用法 |
---|---|---|
1 | 细绳 | 它们用于处理字符串文字。 |
2 | 聚合 | 它们用于对 CQL 查询结果执行一些聚合操作。 |
3 | 关系 | 它们用于获取关系的详细信息,例如 startnode、endnode 等。 |
我们将在后续章节中详细讨论所有 Neo4j CQL 命令、子句和函数的语法、用法和示例。
Neo4j CQL 数据类型
这些数据类型类似于 Java 语言。它们用于定义节点或关系的属性。
Neo4j CQL 支持以下数据类型 –
Sr.No | CQL 数据类型 | 用法 |
---|---|---|
1 | 布尔值 | 它用于表示布尔文字:true、false。 |
2 | 字节 | 它用于表示 8 位整数。 |
3 | 短的 | 它用于表示 16 位整数。 |
4 | 整数 | 它用于表示 32 位整数。 |
5 | 长 | 它用于表示 64 位整数。 |
6 | 漂浮 | 它用于表示 32 位浮点数。 |
7 | 双倍的 | 它用于表示 64 位浮点数。 |
8 | 字符 | 它用于表示 16 位字符。 |
9 | 细绳 | 它用于表示字符串。 |
CQL 运算符
以下是 Neo4j Cypher Query 语言支持的运算符列表。
Sr.No | 类型 | 运营商 |
---|---|---|
1 | 数学 | +, -, *, /, %, ^ |
2 | 比较 | +、<>、<、>、<=、>= |
3 | 布尔值 | 与、或、异或、非 |
4 | 细绳 | + |
5 | 列表 | +, IN, [X], [X…..Y] |
6 | 正则表达式 | =- |
7 | 字符串匹配 | 开始,结束,约束 |
Neo4j CQL 中的布尔运算符
Neo4j 支持以下布尔运算符在 Neo4j CQL WHERE 子句中使用以支持多个条件。
Sr.No | 布尔运算符 | 描述 |
---|---|---|
1 | 和 | 它是一个支持 AND 操作的 Neo4j CQL 关键字。它就像 SQL AND 运算符。 |
2 | 或者 | 它是一个 Neo4j CQL 关键字,用于支持 OR 操作。它就像 SQL AND 运算符。 |
3 | 不是 | 它是一个支持 NOT 操作的 Neo4j CQL 关键字。它就像 SQL AND 运算符。 |
4 | 异或 | 它是一个 Neo4j CQL 关键字,用于支持 XOR 操作。它就像 SQL AND 运算符。 |
Neo4j CQL 中的比较运算符
Neo4j 支持在 Neo4j CQL WHERE 子句中使用以下比较运算符来支持条件。
Sr.No | 布尔运算符 | 描述 |
---|---|---|
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 Query。
CREATE (sample)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器,如下面的屏幕截图所示。
第 2 步– 打开浏览器,将以下 URL 复制粘贴到地址栏中http://localhost:7474/。这将为您提供 Neo4j 的内置浏览器应用程序,并带有美元提示,如下面的屏幕截图所示。
步骤 3 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
确认
要验证节点类型的创建,请在美元提示中执行以下查询。
MATCH (n) RETURN n
这个查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论这个查询)。
执行时,此查询显示创建的节点,如下面的屏幕截图所示。
创建多个节点
Neo4j CQL 的 create 子句也用于同时创建多个节点。为此,您需要传递要创建的节点的名称,以逗号分隔。
句法
以下是使用 CREATE 子句创建多个节点的语法。
CREATE (node1),(node2)
例子
以下是在 Neo4j 中创建多个节点的示例 Cypher 查询。
CREATE (sample1),(sample2)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
确认
要验证节点的创建,请在美元提示中键入并执行以下查询。
MATCH (n) RETURN n
这个查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论这个查询)。
执行时,此查询显示创建的节点,如下面的屏幕截图所示。
创建带有标签的节点
Neo4j 中的标签用于使用标签对节点进行分组(分类)。您可以使用 CREATE 子句为 Neo4j 中的节点创建标签。
句法
以下是使用 Cypher 查询语言创建带有标签的节点的语法。
CREATE (node:label)
例子
以下是一个示例 Cypher Query,它创建了一个带有标签的节点。
CREATE (Dhawan:player)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
确认
要验证节点的创建,请在美元提示中键入并执行以下查询。
MATCH (n) RETURN n
这个查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论这个查询)。
执行时,此查询显示创建的节点,如下面的屏幕截图所示。
创建具有多个标签的节点
您还可以为单个节点创建多个标签。您需要通过用冒号“:”分隔它们来指定节点的标签。
句法
以下是创建具有多个标签的节点的语法。
CREATE (node:label1:label2:. . . . labeln)
例子
以下是一个示例 Cypher Query,它在 Neo4j 中创建一个具有多个标签的节点。
CREATE (Dhawan:person:player)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
确认
要验证节点的创建,请在美元提示中键入并执行以下查询。
MATCH (n) RETURN n
这个查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论这个查询)。
执行时,此查询显示创建的节点,如下面的屏幕截图所示。
创建具有属性的节点
属性是节点存储数据所使用的键值对。您可以使用 CREATE 子句创建具有属性的节点。您需要在花括号“{}”中指定用逗号分隔的这些属性。
句法
以下是创建具有属性的节点的语法。
CREATE (node:label { key1: value, key2: value, . . . . . . . . . })
例子
以下是一个示例 Cypher Query,它创建了一个具有属性的节点。
CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"})
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
确认
要验证节点的创建,请在美元提示中键入并执行以下查询。
MATCH (n) RETURN n
这个查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论这个查询)。
执行时,此查询显示创建的节点,如下面的屏幕截图所示。
返回创建的节点
在本章中,我们使用MATCH (n) RETURN n查询来查看创建的节点。此查询返回数据库中的所有现有节点。
取而代之的是,我们可以使用 RETURN 子句和 CREATE 来查看新创建的节点。
句法
以下是在 Neo4j 中返回节点的语法。
CREATE (Node:Label{properties. . . . }) RETURN Node
例子
以下是一个示例 Cypher Query,它创建一个具有属性的节点并返回它。
CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) RETURN Dhawan
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j CQL – 创建关系
在 Noe4j 中,关系是一个元素,我们使用它来连接图的两个节点。这些关系具有数据的方向、类型和形式模式。本章教你如何 –
- 建立关系
- 在现有节点之间创建关系
- 创建与标签和属性的关系
建立关系
我们可以使用 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
在美元提示中复制并粘贴所需的查询,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
在现有节点之间创建关系
您还可以使用MATCH子句在现有节点之间创建关系。
句法
以下是使用 MATCH 子句创建关系的语法。
MATCH (a:LabeofNode1), (b:LabeofNode2) WHERE a.name = "nameofnode1" AND b.name = " nameofnode2" CREATE (a)-[: Relation]->(b) RETURN a,b
例子
以下是使用 match 子句创建关系的示例 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
创建与标签和属性的关系
您可以使用 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
创建完整路径
在 Neo4j 中,路径是使用连续关系形成的。可以使用 create 子句创建路径。
句法
以下是使用 CREATE 子句在 Neo4j 中创建路径的语法。
CREATE p = (Node1 {properties})-[:Relationship_Type]-> (Node2 {properties})[:Relationship_Type]->(Node3 {properties}) RETURN p
例子
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 合并命令
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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。由于您已经在数据库中创建了一个名为“Dhawan”且标签为“player”的节点,Neo4j 将其返回,如下面的屏幕截图所示。
示例 2
现在,尝试将名为“CT2013”的节点与名为 Tournament 的标签合并。由于没有带有此标签的节点,Neo4j 创建一个具有给定名称的节点并返回它。
MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"}) RETURN CT2013, labels(CT2013)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。如前所述,因为没有具有给定标签(锦标赛)的节点。Neo4j 创建并返回指定的节点,如下面的屏幕截图所示。
将节点与属性合并
您还可以将节点与一组属性合并。如果这样做,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 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。如前所述,由于没有具有指定标签和属性的节点,因此它会创建一个,如下面的屏幕截图所示。
OnCreate 和 OnMatch
每当我们执行合并查询时,都会匹配或创建一个节点。使用 on create 和 on match,您可以设置用于指示节点是创建还是匹配的属性。
句法
以下是OnCreate和OnMatch子句的语法。
MERGE (node:label {properties . . . . . . . . . . .}) ON CREATE SET property.isCreated ="true" ON MATCH SET property.isFound ="true"
例子
以下是一个示例 Cypher Query,它演示了Neo4j中OnCreate和OnMatch子句的用法。如果指定的节点已存在于数据库中,则将匹配该节点并在该节点中创建具有键值对 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。如前所述,由于没有具有指定详细信息的节点,Neo4j 将其与属性isFound一起创建,如下面的屏幕截图所示。
合并关系
就像节点一样,您也可以使用 MERGE 子句合并关系。
例子
以下是一个示例 Cypher Query,它使用 Neo4j 中的 MATCH 子句合并关系。此查询尝试合并节点“ind”(标签:国家和名称:印度)和 ICC13(标签:锦标赛和名称: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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。由于数据库中不存在指定的关系,Neo4j 创建了一个,如下面的屏幕截图所示。
同样,您也可以合并多个关系和无向关系。
Neo4j – 设置子句
使用 Set 子句,您可以向现有节点或关系添加新属性,还可以添加或更新现有属性值。
在本章中,我们将讨论如何 –
- 设置属性
- 删除属性
- 设置多个属性
- 在节点上设置标签
- 在一个节点上设置多个标签
设置属性
使用 SET 子句,您可以在节点中创建新属性。
句法
以下是设置属性的语法。
MATCH (node:label{properties . . . . . . . . . . . . . . }) SET node.property = value RETURN node
例子
在继续示例之前,首先创建一个名为 Dhawan 的节点,如下所示。
CREATE (Dhawan:player{name: "shikar Dhawan", YOB: 1985, POB: "Delhi"})
以下是一个示例 Cypher Query,用于创建名为“highestscore”且值为“187”的属性。
MATCH (Dhawan:player{name: "shikar Dhawan", YOB: 1985, POB: "Delhi"}) SET Dhawan.highestscore = 187 RETURN Dhawan
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里可以观察到在名为“Dhawan”的节点中创建了一个键值对highestscore/187的属性。
删除属性
您可以通过将NULL作为值传递给现有属性来删除现有属性。
句法
以下是使用 SET 子句从节点中删除属性的语法。
MATCH (node:label {properties}) SET node.property = NULL RETURN node
例子
在继续示例之前,首先创建一个节点“jadeja”,如下所示。
Create (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
以下是一个示例 Cypher Query,它使用 SET 子句从此节点中删除名为 POB 的属性,如下所示。
MATCH (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) SET Jadeja.POB = NULL RETURN Jadeja
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里您可以观察到名为POB的变量已被删除。
设置多个属性
同样,您可以使用 Set 子句在节点中创建多个属性。为此,您需要用逗号指定这些键值对。
句法
以下是使用 SET 子句在节点中创建多个属性的语法。
MATCH (node:label {properties}) SET node.property1 = value, node.property2 = value RETURN node
例子
以下是一个示例 Cypher Query,它使用 Neo4j 中的 SET 子句在节点中创建多个属性。
MATCH (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988}) SET Jadeja.POB: "NavagamGhed", Jadeja.HS = "90" RETURN Jadeja
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里,您可以看到创建了名为 POB 和 HS 的属性。
在节点上设置标签
您可以使用 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里你可以观察到名为“player”的标签被添加到节点上。
在一个节点上设置多个标签
您可以使用 SET 子句为现有节点设置多个标签。在这里,您需要通过用冒号“:”分隔来指定标签。
句法
以下是使用 SET 子句为现有节点设置多个标签的语法。
MATCH (n {properties . . . . . . . }) SET n :label1:label2 RETURN n
例子
在继续示例之前,首先创建一个名为“Ishant”的节点,如下所示。
CREATE (Ishant {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"})
以下是一个示例 Cypher Query,用于使用 SET 子句在节点上创建多个标签。
MATCH (Ishant {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) SET Ishant: player:person RETURN Ishant
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里,您可以观察到两个标签 – 人和玩家 – 被添加到名为Ishant的节点。
Neo4j – 删除条款
您可以使用 DELETE 子句从数据库中删除节点和关系。
删除所有节点和关系
以下是使用 DELETE 子句删除数据库中所有节点和关系的查询。
询问
MATCH (n) DETACH DELETE n
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
这将从您的 neo4j 数据库中删除所有节点和关系并将其清空。
删除特定节点
要删除特定节点,您需要在上述查询中的“n”位置指定节点的详细信息。
句法
以下是使用 DELETE 子句从 Neo4j 中删除特定节点的语法。
MATCH (node:label {properties . . . . . . . . . . }) DETACH DELETE node
例子
在继续示例之前,请在 Neo4j 数据库中创建一个节点“Ishant”,如下所示。
CREATE (Ishant:player {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"})
以下是一个示例 Cypher Query,它使用 DELETE 子句删除上面创建的节点。
MATCH (Ishant:player {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) DETACH DELETE Ishant
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里可以观察到指定的节点被删除了。
Neo4j – 删除条款
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"})
以下是使用 REMOVE 子句删除上面创建的节点的示例 Cypher 查询。
MATCH (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) REMOVE Dhoni.POB RETURN Dhoni
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里,您可以观察到名为 POB 的节点已被删除。
从节点移除标签
与 property 类似,您也可以使用 remove 子句从现有节点中删除标签。
句法
以下是从节点中删除标签的语法。
MATCH (node:label {properties . . . . . . . . . . . }) REMOVE node:label RETURN node
例子
以下是使用 remove 子句从现有节点中删除标签的示例 Cypher 查询。
MATCH (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) REMOVE Dhoni:player RETURN Dhoni
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里,您可以观察到标签已从节点中删除。
删除多个标签
您还可以从现有节点中删除多个标签。
句法
以下是从节点中删除多个标签的语法。
MATCH (node:label1:label2 {properties . . . . . . . . }) REMOVE node:label1:label2 RETURN node
例子
在继续示例之前,创建一个节点 Ishant,如下所示。
CREATE (Ishant:player:person {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"})
以下是一个示例 Cypher Query,用于从节点中删除多个标签。
MATCH (Ishant:player:person {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) REMOVE Ishant:player:person RETURN Ishant
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里,您可以观察到指定的标签已从节点中删除。
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 Query,它使用 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
确认
要验证节点的创建,请在美元提示中键入并执行以下查询。
MATCH (n) RETURN n
这个查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论这个查询)。
执行时,此查询显示创建的节点,如下面的屏幕截图所示。
Neo4j – 匹配条款
在本章中,我们将了解 Match Clause 以及使用该子句可以执行的所有功能。
使用匹配获取所有节点
使用 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
获取特定标签下的所有节点
使用 match 子句,您可以获取特定标签下的所有节点。
句法
以下是获取特定标签下所有节点的语法。
MATCH (node:label) RETURN node
例子
下面是一个示例 Cypher Query,它返回数据库中标签player下的所有节点。
MATCH (n:player) RETURN n
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
按关系匹配
您可以使用 MATCH 子句根据关系检索节点。
句法
以下是使用 MATCH 子句基于关系检索节点的语法。
MATCH (node:label)<-[: Relationship]-(n) RETURN n
例子
以下是使用 MATCH 子句基于关系检索节点的示例 Cypher 查询。
MATCH (Ind:Country {name: "India", result: "Winners"})<-[: TOP_SCORER_OF]-(n) RETURN n.name
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
删除所有节点
您可以使用 MATCH 子句删除所有节点。
询问
以下是删除 Neo4j 中所有节点的查询。
MATCH (n) detach delete n
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 可选的匹配子句
所述可选MATCH子句用于搜索中所述的图案,同时使用空值缺失的图案的零件。
OPTIONAL MATCH 类似于 match 子句,唯一的区别是它由于模式的缺失部分而返回 null。
句法
以下是具有关系的 OPTIONAL MATCH 的语法。
MATCH (node:label {properties. . . . . . . . . . . . . .}) OPTIONAL MATCH (node)-->(x) RETURN x
例子
以下是一个示例 Cypher Query,它尝试从节点 ICCT2013 检索关系。由于没有这样的节点,它返回 null。
MATCH (a:Tornament {name: "ICC Champions Trophy 2013"}) OPTIONAL MATCH (a)-->(x) RETURN x
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里您可以观察到,由于所需模式没有匹配项,因此 Neo4j 返回了 null。
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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
具有多个条件的 WHERE 子句
您还可以使用 WHERE 子句来验证多个条件。
句法
以下是在具有多个条件的 Neo4j 中使用 WHERE 子句的语法。
MATCH (emp:Employee) WHERE emp.name = 'Abc' AND emp.name = 'Xyz' RETURN emp
例子
以下是一个示例 Cypher Query,它使用两个条件过滤 Neo4j 数据库中的节点。
MATCH (player) WHERE player.country = "India" AND player.runs >=175 RETURN player
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
使用与 Where 子句的关系
您还可以使用 Where 子句使用关系过滤节点。
例子
假设我们在数据库中有以下图表。
以下是使用 WHERE 子句检索印度最佳射手的示例 Cypher 查询,如下所示。
MATCH (n) WHERE (n)-[: TOP_SCORER_OF]->( {name: "India", result: "Winners"}) RETURN n
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里您可以观察到 Neo4j 返回了节点,该节点与节点名称为 India 的国家有 TOP_SCORER_OF 关系。
Neo4j – 计数功能
假设我们已经在数据库中创建了一个图表,其中包含以下详细信息。
数数
的计数()函数是用来计数行数。
句法
以下是计数函数的语法。
MATCH (n { name: 'A' })-->(x) RETURN n, count(&ast)
例子
以下是一个示例 Cypher Query,它演示了count()函数的用法。
Match(n{name: "India", result: "Winners"})--(x) RETURN n, count(*)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
组数
该COUNT子句也可用于计算的关系类型的群体。
例子
以下是一个示例 Cypher Query,它计算并返回参与每个关系的节点数。
Match(n{name: "India", result: "Winners"})-[r]-(x) RETURN type (r), count(*)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
Neo4j – 退货条款
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 Query,它创建一个名为 Dhoni 的节点并返回它。
Create (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) RETURN Dhoni
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
返回多个节点
您还可以使用 return 子句返回多个节点。
句法
以下是使用 return 子句返回多个节点的语法。
CREATE (Ind:Country {name: "India", result: "Winners"}) CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"}) RETURN Ind, CT2013
例子
以下是使用 return 子句返回多个节点的示例 Cypher 查询。
CREATE (Ind:Country {name: "India", result: "Winners"}) CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"}) RETURN Ind, CT2013
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。在这里您可以观察到 Neo4j 返回了 2 个节点。
回归关系
您还可以使用 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
返回属性
您还可以使用 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
返回所有元素
您可以使用 RETURN 子句返回 Neo4j 数据库中的所有元素。
例子
以下是一个示例 Cypher Query,用于返回数据库中的所有元素。
Match p = (n {name: "India", result: "Winners"})-[r]-(x) RETURN *
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
返回带有列别名的变量
您可以使用 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 按条款排序
您可以使用 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 Query,它按照玩家使用 ORDERBY 子句的得分顺序返回上述创建的节点。
MATCH (n) RETURN n.name, n.runs ORDER BY n.runs
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
按多个属性排序节点
您可以使用ORDEYBY子句根据多个属性排列节点。
句法
以下是使用 ORDERBY 子句按多个属性排列节点的语法。
MATCH (n) RETURN n ORDER BY n.age, n.name
例子
以下是一个示例 Cypher Query,它根据属性 – 运行和国家/地区排列本章前面创建的节点。
MATCH (n) RETURN n.name, n.runs, n.country ORDER BY n.runs, n.country
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
按降序对节点进行排序
您可以使用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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 限制条款
的限制子句用于限制输出的行数。
句法
以下是 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 Query,它以降序返回上面创建的节点并将结果中的记录限制为 3。
MATCH (n) RETURN n.name, n.runs ORDER BY n.runs DESC LIMIT 3
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
用表达式限制
您还可以将 LIMIT 子句与表达式一起使用。
例子
以下是使用表达式限制记录的示例 Cypher 查询。
MATCH (n) RETURN n.name, n.runs ORDER BY n.runs DESC LIMIT toInt(3 * rand())+ 1
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 跳过条款
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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
跳过使用表达式
您可以使用表达式跳过结果的记录。
例子
以下是使用带有表达式的 SKIP 子句的示例 Cypher 查询。
MATCH (n) RETURN n.name, n.runs ORDER BY n.runs DESC SKIP toInt (2*rand())+ 1
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 带子句
您可以使用 WITH 子句将查询艺术链接在一起。
句法
以下是 WITH 子句的语法。
MATCH (n) WITH n ORDER BY n.property RETURN collect(n.property)
例子
下面是一个示例 Cypher Query,它演示了 WITH 子句的用法。
MATCH (n) WITH n ORDER BY n.name DESC LIMIT 3 RETURN collect(n.name)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 放松条款
unwind 子句用于将列表展开为行序列。
例子
以下是展开列表的示例 Cypher 查询。
UNWIND [a, b, c, d] AS x RETURN x
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 字符串函数
与 SQL 一样,Neo4J CQL 提供了一组字符串函数,可以在 CQL 查询中使用它们来获得所需的结果。
在这里,我们将讨论一些重要且经常使用的功能。
字符串函数列表
以下是 Neo4j 中突出的字符串函数列表。
Sr.No | 功能说明 |
---|---|
1 | UPPER
它用于将所有字母更改为大写字母。 |
2 | LOWER
它用于将所有字母更改为小写字母。 |
3 | SUBSTRING
它用于获取给定字符串的子字符串。 |
4 | 代替
它用于用字符串的给定子字符串替换子字符串。 |
Neo4j – 聚合函数
与 SQL 一样,Neo4j CQL 提供了一些聚合函数以在 RETURN 子句中使用。它类似于 SQL 中的 GROUP BY 子句。
我们可以在 MATCH 命令中使用这个 RETURN + Aggregation Functions 来处理一组节点并返回一些聚合值。
聚合函数列表
以下是 Neo4j 中的聚合函数列表。
Sr.No | 功能说明 |
---|---|
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 社区” –
Windows“开始”按钮→“所有程序”→“Neo4j 社区”→“Neo4j 社区”
默认情况下,它选择c:\Users\[用户名]\Documents\Neo4j\default.graphdb。但是,如果我们愿意,我们可以将路径更改为其他目录。
第 2 步– 此处我们已更改为 Neo4j 数据库文件夹。
C:\Ne04j2.0db
步骤 3 – 单击“开始”按钮。
一旦服务器启动,我们可以观察到我们的 Neo4j 数据库文件是在指定目录下生成的。
在进行数据库备份之前,我们应该做的第一件事是关闭 Neo4j 数据库服务器。
步骤 4 – 单击“停止”按钮关闭服务器。
Neo4j 数据库文件位于 C:\Ne04j2.0db
步骤 5 – 打开命令提示符。
第 6 步– 在 C:\Neo4j(这可以是文件系统中的任何位置)创建一个文件夹“Neo4jDbBackup-01”。
mkdir C:\Neo4j\Neo4jDbBackup-01
它在指定的文件系统位置“C:\Neo4j\”创建一个新文件夹“Neo4jDbBackup-01”
步骤 7 – 键入以下命令并按 Enter 键。
copy C:\Ne04j2.0db C:\Neo4j\Neo4jDbBackup-01
这意味着我们的文件被复制到所需的目标文件夹。访问该文件夹并观察该文件夹中有我们的数据库文件。
第 8 步– 使用任何 Windows 压缩/解压缩工具(如 WinZip、7 Zip 或 WinRAR)来压缩我们的数据库文件夹。
第 9 步– 现在我们的 Neo4jDbBackup-01.zip 文件已创建。如果您的文件系统有任何内存限制,请删除“C:\Neo4j\”中的“Neo4jDbBackup-01”文件夹
Neo4j 数据库还原
步骤 1 – 关闭数据库服务器。请参考前面的步骤关闭服务器。
步骤 2 – 清空当前数据库文件夹。
第 3 步– 使用任何 Windows 压缩/解压缩工具(如 WinZip、7 Zip 或 WinRar)解压缩我们的备份文件夹。
步骤 4 – 打开命令提示符并执行以下命令。
Copy C:\Neo4j\Neo4jDbBackup-01 C:\Ne04j2.0db
现在我们可以观察到我们的数据库文件夹包含工作备份文件
步骤 5 – 单击“开始”按钮启动服务器。
步骤 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
删除索引
Neo4j CQL 提供了一个“DROP INDEX”命令来删除节点或关系属性的现有索引。
句法
以下是在 Neo4j 中创建索引的语法。
DROP INDEX ON:label(node)
例子
以下是在 Neo4j 中名为“Dhawan”的节点上创建索引的示例 Cypher 查询。
DROP INDEX ON:player(Dhawan)
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
Neo4j – 创建唯一约束
在 Neo4j 数据库中,CQL CREATE 命令总是创建一个新节点或关系,这意味着即使您使用相同的值,它也会插入一个新行。根据我们对某些节点或关系的应用程序要求,我们必须避免这种重复。为此,我们应该使用一些数据库约束来为节点或关系的一个或多个属性创建规则。
与 SQL 一样,Neo4j 数据库也支持对节点或关系属性的 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 http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。
确认
现在,尝试添加另一个具有冗余 id 值的节点。在这里,我们尝试创建一个 ID 为002的节点。
CREATE (Jadeja:player {id:002, name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
如果您执行此查询,您将收到一条错误消息,如下面的屏幕截图所示。
Neo4j – 丢弃唯一
我们已经在上一章中通过示例讨论了创建 UNIQUE 约束操作。在本章中,我们将通过示例讨论删除 UNIQUE 约束操作。
Neo4j CQL 提供“DROP CONSTRAINT”命令来从节点或关系属性中删除现有的唯一约束。
句法
以下是在 Neo4j 中删除 UNIQUE 约束的语法。
DROP CONSTRAINT ON (node:label) ASSERT node.id IS UNIQUE
例子
以下是一个示例 Cypher Query,用于删除属性id上的 UNIQUE 约束。
DROP CONSTRAINT ON (n:player) ASSERT n.id IS UNIQUE
要执行上述查询,请执行以下步骤 –
步骤 1 – 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。
步骤 2 – 将所需的查询复制并粘贴到美元提示中,然后按下以下屏幕截图中突出显示的播放按钮(以执行查询)。
结果
执行时,您将得到以下结果。