Neo4j 简明教程

Neo4j - Quick Guide

Neo4j - Overview

Neo4j 是全球领先的开源图数据库,使用 Java 技术开发。它具有高度的可扩展性和无模式(NoSQL)。

What is a Graph Database?

图是对象集的直观表示,其中一些对象对通过链接连接。它由两个元素组成——节点(顶点)和关系(边)。

图形数据库是一个用于以图形形式对数据建模的数据库。在此,图的节点描绘实体,而关系描绘这些节点的关联。

Neo4j 是一个流行的图形数据库。其他图形数据库包括 Oracle NoSQL 数据库、OrientDB、HypherGraphDB、GraphBase、InfiniteGraph 和 AllegroGraph。

Why Graph Databases?

如今,大多数数据是以不同对象之间关系的形式存在的,更常见的是,数据之间的关系比数据本身更有价值。

关系型数据库存储高度结构化的数据,其中有几条记录存储相同类型的数据,因此它们可用于存储结构化数据,并且它们不存储数据之间的关系。

与其他数据库不同的是,图形数据库将关系和连接存储为一级实体。

图形数据库的数据模型比其他数据库简单,并且它们可与 OLTP 系统一起使用。它们提供事务完整性和操作可用性等功能。

RDBMS Vs Graph Database

以下是比较关系型数据库和图形数据库的表格。

Sr.No

RDBMS

Graph Database

1

Tables

Graphs

2

Rows

Nodes

3

Columns and Data

Properties and its values

4

Constraints

Relationships

5

Joins

Traversal

Advantages of Neo4j

以下是 Neo4j 的优势。

  1. Flexible data model − Neo4j 提供了一个灵活简单但强大的数据模型,可以根据应用程序和行业轻松更改该数据模型。

  2. Real-time insights − Neo4j 根据实时数据提供结果。

  3. High availability − Neo4j 对于具有事务保证的大型企业实时应用程序具有很高的可用性。

  4. Connected and semi structures data − 使用 Neo4j,您可以轻松表示连接和半结构化数据。

  5. Easy retrieval − 与其他数据库相比,使用 Neo4j,您不仅可以表示连接的数据,还可以在更短的时间内轻松检索(遍历/导航)连接的数据。

  6. Cypher query language − Neo4j 提供了一个声明性查询语言来表示图形,使用的是 ascii-art 语法。此语言的命令采用人类可读格式,且很容易学习。

  7. No joins − 使用 Neo4j,不需要复杂的连接来检索连接/相关数据,因为它非常容易在没有连接或索引的情况下检索相邻节点或关系详细信息。

Features of Neo4j

以下是 Neo4j 的显著特征 −

  1. Data model (flexible schema) − Neo4j 遵循名为本地属性图模型的数据模型。在这里,图形包含节点(实体),这些节点相互连接(由关系表示)。节点和关系以属性的形式存储数据,单个属性以键值对形式存储。在 Neo4j 中,不需要遵循固定的模式。您可以根据要求添加或删除属性。它还提供模式约束。

  2. ACID properties − Neo4j 支持完全 ACID(原子性、一致性、隔离性和持久性)规则。

  3. Scalability and reliability − 您可以通过增加读/写次数和增加数量来扩展数据库,而无需影响查询处理速度和数据完整性。Neo4j 还为 replication 提供支持,以确保数据安全性和可靠性。

  4. Cypher Query Language − Neo4j 提供了一个强大的声明性查询语言,称为 Cypher。它使用 ASCII-art 来描绘图形。Cypher 易于学习,可用于在不使用连接等复杂查询的情况下创建和检索数据之间的关系。

  5. Built-in web application − Neo4j 提供了一个内置的 Neo4j Browser Web 应用程序。使用此应用程序,您可以创建和查询您的图形数据。

  6. Drivers − Neo4j 可以使用 −REST API 来处理 Java、Spring、Scala 等编程语言。Java Script 可以用来处理类似于 Node JS 的 UI MVC 框架。它支持两种类型的 Java API:Cypher API 和 Native Java API,用来开发 Java 应用程序。除了这些以外,你也可以处理其他数据库,比如 MongoDB、Cassandra 等。

  7. Indexing − Neo4j 使用 Apache Lucence 来支持索引。

Neo4j - Data Model

Neo4j Property Graph Data Model

Neo4j 图形数据库遵循属性图形模型来存储和管理其数据。

以下是属性图形模型的关键特性 -

  1. 该模型使用节点、关系和属性表示数据

  2. Properties are key-value pairs

  3. 节点使用圆圈表示,关系使用箭头键表示

  4. 关系有方向:单向和双向

  5. 每个关系都包含“起始节点”或“来自节点”和“目标节点”或“结束节点”

  6. 节点和关系都包含属性

  7. Relationships connects nodes

在属性图形数据模型中,关系应该是方向性的。如果我们尝试创建没有方向的关系,那么它将抛出一个错误消息。

在 Neo4j 中,关系也应该是方向性的。如果我们尝试创建没有方向的关系,那么 Neo4j 将抛出一个错误消息,指出“关系应该是方向性的”。

Neo4j 图形数据库将所有数据存储在节点和关系中。我们既不需要任何附加的 RRBMS 数据库,也不需要任何 SQL 数据库来存储 Neo4j 数据库数据。它以其本机格式以图形的形式存储其数据。

Neo4j 使用 Native GPE(图形处理引擎)来处理其 Native 图形存储格式。

图形数据库数据模型的主要构建模块有 -

  1. Nodes

  2. Relationships

  3. Properties

以下是属性图形的一个简单示例。

property graph

在这里,我们使用圆圈表示节点。关系使用箭头表示。关系是方向性的。我们可以用属性(键值对)表示节点的数据。在此示例中,我们在节点的圆圈内表示了每个节点的 ID 属性。

Neo4j - Environment Setup

在本章中,我们将讨论如何使用 exe 文件在系统中安装 Neo4j。

Neo4j Database Server Setup with Windows exe File

按照下列步骤下载 Neo4j 到你的系统中。

Step 1 − 使用 https://neo4j.com/ 访问 Neo4j 官方网站。单击此链接后,你将转到 neo4j 网站的主页。

homepage

Step 2 − 如上图所示,此页面在右上角有一个“下载”按钮。单击此按钮。

Step 3 − 你将转到下载页面,你可以在其中下载 Neo4j 的社区版和企业版。单击相应的按钮来下载该软件的社区版。

download page

Step 4 − 你将转到一个页面,你可以在其中下载与不同操作系统兼容的 Neo4j 软件的社区版。下载与所需操作系统相应的该文件。

respective operating system

这会将一个名为 neo4j-community_windows-x64_3_1_1.exe 的文件下载到你的系统中,如下面的截图所示。

community window

Step 5 − 双击 exe 文件以安装 Neo4j Server。

exe file

Step 6 − 接受许可证协议并继续安装。在完成此过程后,你可以看到 Neo4j 已安装在你的系统中。

Starting the Server

Step 1 − 单击 Windows 开始菜单,并单击 Neo4j 的开始菜单快捷方式以启动 Neo4j 服务器。

starting server

Step 2 - 单击快捷方式后,您将获得 Neo4j Community 版的一个窗口。默认情况下,它选择 c:\Users\[username]\Documents\Neo4j\default.graphdb。如果您愿意,可以将您的路径更改为不同的目录。

shortcut

Step 3 - 单击“启动”按钮以启动 Neo4j 服务器。

start button

服务器启动后,您可以观察到数据库目录已填充,如下面的屏幕截图所示。

database directory

Working with Neo4j

正如前面章节中所讨论的,neo4j 提供了一个内置的浏览应用程序来与 Neo4j 配合使用。您可以使用以下网址访问 Neo4j http://localhost:7474/

working

Neo4j - Building Blocks

Neo4j 图形数据库具有以下构件 −

  1. Nodes

  2. Properties

  3. Relationships

  4. Labels

  5. Data Browser

Node

节点是一个图的基本单元。它包含具有键值对的属性,如下图所示。

node

在此,节点名称 =“Employee”,它包含一系列属性作为键值对。

Properties

属性是键值对,用来描述图形节点和关系。

Key = Value

其中键是一个字符串,值可以使用任何 Neo4j 数据类型表示。

Relationships

关系是图形数据库的另一个主要构建块。它将两个节点连接起来,如下图所示。

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。

Labels

标签为一组节点或关系关联一个通用名称。一个节点或关系可以包含一个或多个标签。我们可以为现有节点或关系创建新标签。我们可以从现有节点或关系中移除现有的标签。

从上一个图表中,我们可以观察到有 2 个节点。

左侧节点具有标签:“Emp”,右侧节点具有标签:“Dept”。

这两个节点之间的关系也具有标签:“WORKS_FOR”。

Note − Neo4j 将数据存储在节点或关系的属性中。

Neo4j Data Browser

一旦我们安装了 Neo4j,我们就可以使用以下 URL 访问 Neo4j 数据浏览器

http://localhost:7474/browser/
data browser

Neo4j 数据浏览器用于执行 CQL 命令和查看输出。

在这里,我们需要在美元提示符下执行所有 CQL 命令: "$"

在美元符号后键入命令,然后单击“执行”按钮来运行你的命令。

它与 Neo4j 数据库服务器交互,检索并将结果显示在美元提示符的正下方。

使用“VI 视图”按钮以图表格式查看结果。上图显示了“UI 视图”格式下的结果。

使用“网格视图”按钮以网格视图形式查看结果。下图显示了以“网格视图”格式显示的相同结果。

grid view

当我们使用“网格视图”来查看查询结果时,我们可以将其导出到两种不同格式的文件中。

CSV

单击“导出 CSV”按钮以 csv 文件格式导出结果。

csv

JSON

单击“导出 JSON”按钮以 JSON 文件格式导出结果。

json

但是,如果我们使用“UI 视图”查看查询结果,我们只能将结果导出到一种格式的文件中:JSON

Neo4j CQL - Introduction

CQL 是 Cypher 查询语言的简称。就像 Oracle Database 具有 SQL 查询语言一样,Neo4j 具有 CQL 作为查询语言。

Neo4j CQL

  1. 是 Neo4j 图数据库的查询语言。

  2. 是一种声明式模式匹配语言。

  3. Follows SQL like syntax.

  4. 语法非常简单且采用人类可读格式。

Like Oracle SQL

  1. Neo4j CQL 具有执行数据库操作的命令。

  2. Neo4j CQL 支持许多子句,例如 WHERE、ORDER BY 等,以便轻松编写极其复杂的查询。

  3. Neo4j CQL 支持某些函数,例如 String、Aggregation。此外,它还支持某些关系函数。

Neo4j CQL Clauses

以下是 Neo4j *C*ypher *Q*uery *L*anguage 的读取子句:

Sr.No

Read Clauses

Usage

1

MATCH

此子句用于按照指定模式搜索数据。

2

OPTIONAL MATCH

这与匹配相同,唯一不同的是,在缺少模式部分时它可以使用空值。

3

WHERE

此子句 id 用于向 CQL 查询添加内容。

4

START

此子句用于通过传统索引查找起始点。

5

LOAD CSV

此子句用于从 CSV 文件导入数据。

以下是 Neo4j *C*ypher *Q*uery *L*anguage 的写入子句:

Sr.No

Write Clause

Usage

1

CREATE

此子句用于创建节点、关系和属性。

2

MERGE

此子句验证图中是否存在指定模式。如果不存在,则会创建该模式。

3

SET

此子句用于更新节点上的标签、节点上的属性和关系。

4

DELETE

此子句用于删除图中的节点和关系或路径等。

5

REMOVE

此子句用于删除节点和关系中的属性和元素。

6

FOREACH

此类用于更新列表中的数据。

7

CREATE UNIQUE

使用 CREATE 和 MATCH 子句,您可以通过匹配现有模式并创建缺少的模式来获得一个唯一模式。

8

使用 Cypher 导入 CSV 文件

使用 Load CSV 可以从 .csv 文件导入数据。

以下是 Neo4j *C*ypher *Q*uery *L*anguage 的常用子句 -

Sr.No

General Clauses

Usage

1

RETURN

此子句用于定义查询结果集中应包含的内容。

2

ORDER BY

此子句用于按顺序排列查询的输出。它与 RETURNWITH 子句一起使用。

3

LIMIT

此子句用于将结果中的行限制为特定值。

4

SKIP

此子句用于定义从哪一行开始在输出中包含行。

5

WITH

此子句用于将查询部分连接在一起。

6

UNWIND

此子句用于将列表展开为一系列行。

7

UNION

此子句用于合并多个查询的结果。

8

CALL

此子句用于调用在数据库中部署的过程。

Neo4j CQL Functions

以下是常用的 Neo4j CQL 函数 -

Sr.No

CQL Functions

Usage

1

String

它们用于使用字符串文本。

2

Aggregation

它们用于对 CQL 查询结果执行某些聚合操作。

3

Relationship

它们用于获取关系的详细信息,例如 startnode、endnode 等。

在后续章节中,我们将详细讨论所有 Neo4j CQL 命令、子句和函数的语法、用法和示例。

Neo4j CQL Data Types

这些数据类型类似于 Java 语言。它们用于定义节点或关系的属性。

Neo4j CQL 支持以下数据类型 −

Sr.No

CQL Data Type

Usage

1

Boolean

它用于表示布尔文字:true、false。

2

byte

它用于表示 8 位整数。

3

short

它用于表示 16 位整数。

4

int

它用于表示 32 位整数。

5

long

它用于表示 64 位整数。

6

float

它用于表示 32 位浮点数。

7

double

它用于表示 64 位浮点数。

8

char

它用于表示 16 位字符。

9

String

它用于表示字符串。

CQL Operators

以下列出了 Neo4j Cypher 查询语言支持的操作符。

Sr.No

Type

Operators

1

Mathematical

+、-、*、/、%、^

2

Comparison

+、<>、<、>、⇐、>=

3

Boolean

AND, OR, XOR, NOT

4

String

+

5

List

+, IN, [X], [X…..Y]

6

Regular Expression

=-

7

String matching

STARTS WITH、ENDS WITH、CONSTRAINTS

Boolean Operators in Neo4j CQL

Neo4j 支持使用 Neo4j CQL WHERE 子句中的以下布尔运算符来支持多个条件。

Sr.No

Boolean Operators

Description

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 算子。

Comparison Operators in Neo4j CQL

Neo4j 支持在 Neo4j CQL WHERE 子句中使用以下比较运算符,以支持条件。

Sr.No

Boolean Operators

Description

1

=

这是一个 Neo4j CQL “等于”运算符。

2

<

这是一个 Neo4j CQL “不等于”运算符。

3

<

这是一个 Neo4j CQL “小于”运算符。

4

>

这是一个 Neo4j CQL “大于”运算符。

5

这是一个 Neo4j CQL “小于或等于”运算符。

6

> =

这是一个 Neo4j CQL “大于或等于”运算符。

Neo4j CQL - Creating Nodes

正如讨论的那样,一个节点是图数据库中的一个数据/记录。你可以使用 CREATE 从句在 Neo4j 中创建一个节点。本章教你如何 -

  1. Create a single node

  2. Create multiple nodes

  3. 使用一个标签创建一个节点

  4. 使用多个标签创建一个节点

  5. 使用属性创建一个节点

  6. Returning the created node

Creating a Single node

你可以简单地通过指定要创建的节点名称,并使用 CREATE 从句来在 Neo4j 中创建一个节点。

Syntax

以下是使用 Cypher 查询语言创建节点的语法。

CREATE (node_name);

Note - 分号 (;) 是可选的。

Example

以下是一个示例 Cypher 查询,在 Neo4j 中创建了一个节点。

CREATE (sample)

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j 桌面应用程序,并启动 Neo4j 服务器,如下图所示。

start button

Step 2 - 打开你的浏览器,复制代码并粘贴下面的 URL 到你的地址栏 http://localhost:7474/. 这将给你 Neo4j 的内建浏览器应用程序,其中有个美元提示符,如下图所示。

browser app

Step 3 - 将目标查询复制并粘贴到美元提示符中,然后按下在以下截图中突出显示的播放按钮(执行查询)。

dollar prompt

Result

执行后,您将获得以下结果。

single node

Verification

要验证节点类型的创建,在美元提示符中执行以下查询。

MATCH (n) RETURN n

此查询返回数据库中的所有节点(我们将在即将到来的章节中详细讨论此查询)。

执行此查询后,将显示创建的节点,如下图所示。

nodes in database

Creating Multiple Nodes

Neo4j CQL 的 create 子句也用于同时创建多个节点。为此,你需要传递要创建的节点的名称,用逗号分隔。

Syntax

以下是使用 CREATE 从句创建多个节点的语法。

CREATE (node1),(node2)

Example

以下是一个示例 Cypher 查询,在 Neo4j 中创建多个节点。

CREATE (sample1),(sample2)

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

desired query

Result

执行后,您将获得以下结果。

multiple node

Verification

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n

此查询返回数据库中的所有节点(我们将在即将到来的章节中详细讨论此查询)。

执行此查询后,将显示创建的节点,如下图所示。

multiple verification

Creating a Node with a Label

Neo4j 中的标签用于使用标签对节点进行分组(分类)。你可以使用 CREATE 从句为 Neo4j 中的节点创建一个标签。

Syntax

以下是使用 Cypher 查询语言用标签创建节点的语法。

CREATE (node:label)

Example

以下是一个创建带有标签的节点的示例 Cypher 查询。

CREATE (Dhawan:player)

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

node label

Result

执行后,您将获得以下结果。

node statement

Verification

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n

此查询返回数据库中的所有节点(我们将在即将到来的章节中详细讨论此查询)。

执行此查询后,将显示创建的节点,如下图所示。

label verification

Creating a Node with Multiple Labels

还可以为单个节点创建多个标签。需要通过用冒号“ : ”分隔标签来指定节点的标签。

Syntax

以下是创建具有多个标签的节点的语法。

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

Example

以下是一个在 Neo4j 中创建带有多个标签的节点的示例 Cypher 查询。

CREATE (Dhawan:person:player)

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

multiple label

Result

执行后,您将获得以下结果。

executed query

Verification

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n

此查询返回数据库中的所有节点(我们将在即将到来的章节中详细讨论此查询)。

执行此查询后,将显示创建的节点,如下图所示。

multi label verification

Create Node with Properties

属性是节点用于存储数据 key-value 对。可以使用 CREATE 子句创建带有属性的节点。需要在花括号“ { }”中用逗号分隔指定这些属性。

Syntax

以下是创建带有属性的节点的语法。

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

Example

以下是一个创建带有属性的节点的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

property step

Result

执行后,您将获得以下结果。

label result

Verification

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n

此查询返回数据库中的所有节点(我们将在即将到来的章节中详细讨论此查询)。

执行此查询后,将显示创建的节点,如下图所示。

creation node

Returning the Created Node

在整个章节中,我们使用 MATCH (n) RETURN n 查询来查看创建的节点。此查询返回数据库中所有现有的节点。

我们能够使用 RETURN 子句和 CREATE 来代替上述方法来查看新创建的节点。

Syntax

以下是返回 Neo4j 中节点的语法。

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

Example

以下是一个创建带有属性并返回该属性的节点的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

play button

Result

执行后,您将获得以下结果。

return node

Neo4j CQL - Creating a Relationship

在 Noe4j 中,关系是一个元素,我们使用它来连接图中的两个节点。这些关系具有方向、类型和数据形式模式。本章将介绍如何:

  1. Create relationships

  2. 在现有节点之间创建关系

  3. 创建具有标签和属性的关系

Creating Relationships

我们可以使用 CREATE 子句创建一个关系。我们将根据关系的方向在方括号 “[ ]” 中指定关系,因为它是放在连字符 “ - ” 和箭头 “ → ” 之间的,如下所示语法中所示。

Syntax

以下是使用 CREATE 子句创建关系的语法。

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

Example

首先,在数据库中创建两个节点 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

Result

执行后,您将获得以下结果。

executing

Creating a Relationship Between the Existing Nodes

你还可以使用 MATCH 子句在现有节点之间创建关系。

Syntax

以下是使用 MATCH 子句创建关系的语法。

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

Example

以下就是一个使用 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

要执行以上查询,请执行以下步骤。

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

existing node

Result

执行后,您将获得以下结果。

executing

Creating a Relationship with Label and Properties

可以使用 CREATE 子句创建带有标签和属性的关系。

Syntax

下面是使用 CREATE 子句创建带有标签和属性的关系的语法。

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

Example

下面是一个示例 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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

label property

Result

执行后,您将获得以下结果。

executing

Creating a Complete Path

在 Neo4j 中,关系连续使用路径进行形成。可以使用 create 子句创建路径。

Syntax

下面是使用 CREATE 子句在 Neo4j 中创建路径的语法。

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

Example

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

champions trophy

Result

执行后,您将获得以下结果。

result

Neo4j - Merge Command

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

Neo4j CQL MERGE 命令在图中搜索给定的模式。如果存在,则它返回结果。

如果在图中不存在,则它创建一个新节点/关系并返回结果。

在本章中,你将学习如何 −

  1. 合并带有标签的节点

  2. 合并带有属性的节点

  3. OnCreate and OnMatch

  4. Merge a relationship

Syntax

下面是 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)

Merging a Node with a Label

可以使用 MERGE 子句根据标签合并数据库中的节点。如果尝试根据标签合并节点,则 Neo4j 会验证是否存在带有给定标签的任何节点。如果没有,将创建当前节点。

Syntax

以下是根据标签合并节点的语法。

MERGE (node:label) RETURN node

Example 1

下面是一个 Cypher 查询示例,它将一个节点合并到 Neo4j 中(根据标签)。执行此查询时,Neo4j 会验证是否存在任何标签为 player 的节点。如果没有,它会创建一个名为 “Jadeja” 的节点并返回它。

如果存在任何带有给定标签的节点,Neo4j 会返回它们全部。

MERGE (Jadeja:player) RETURN Jadeja

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

merge

Result

执行后,你将获得以下结果。由于你已在数据库中创建了一个标签为 “player” 的名为 “Dhawan” 的节点,所以 Neo4j 会按以下屏幕截图所示返回它。

dhawan player

Example 2

现在,尝试合并一个名为 “CT2013” 的节点,其标签名为 Tournament。由于没有带有此标签的节点,Neo4j 会创建一个带有给定名称的节点并返回它。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL 打开 Neo4j 的内置浏览器应用程序 http://localhost:7474/ ,如下图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

merging node

Result

在执行时,您将获得以下结果。正如所讨论的,由于没有具有给定标签(Tournament)的节点。Neo4j 创建并返回指定节点,如下图所示。

tornament

Merging a Node with Properties

您还可以使用一组属性合并节点。如果您这样做,Neo4j 将搜索与指定节点相等的匹配项,包括属性。如果找不到任何匹配项,则创建一个匹配项。

Syntax

以下是使用属性合并节点的语法。

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

Example

以下是一个示例 Cypher 查询,用于使用属性合并节点。此查询尝试使用属性和标签合并名为 “jadeja” 的节点。由于没有具有确切标签和属性的此类节点,因此 Neo4j 创建了一个。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL 打开 Neo4j 的内置浏览器应用程序 http://localhost:7474/ ,如下图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

merging properties

Result

在执行时,您将获得以下结果。正如所讨论的,由于没有具有指定标签和属性的节点,因此它创建了一个,如下图所示。

property result

OnCreate and OnMatch

每当我们执行合并查询时,一个节点要么匹配,要么创建。使用 on create 和 on match,您可以设置属性来指示节点是创建还是匹配。

Syntax

以下是 OnCreateOnMatch 子句的语法。

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

Example

以下是一个示例 Cypher 查询,演示了在 Neo4j 中使用 OnCreateOnMatch 子句。如果指定的节点已存在于数据库中,则将匹配该节点并在该节点中创建具有键值对 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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

match set

Result

在执行时,您将获得以下结果。正如所讨论的,由于没有具有指定详细信息的节点,因此 Neo4j 创建了它以及属性 isFound ,如下图所示。

oncreate result

Merge a Relationship

就像节点一样,您还可以使用 MERGE 子句合并关系。

Example

以下是一个示例 Cypher 查询,它使用 Neo4j 中的 MATCH 子句合并关系。此查询尝试合并节点 “ind”(标签:国家和名称:印度)和 ICC13(标签:锦标赛和名称:ICC 冠军奖杯 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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

winners list

Result

在执行时,您将获得以下结果。由于指定的关联不存在于数据库中,因此 Neo4j 会创建一个,如下图所示。

relationship merge

同样,您也可以合并多个关系和无方向关系。

Neo4j - Set Clause

使用 Set 子句,可以向现有节点或关系添加新属性,也可以添加或更新现有属性值。

在本节中,我们将探讨如何 −

  1. Set a property

  2. Remove a property

  3. Set multiple properties

  4. 设置节点上的标签

  5. 在节点上设置多个标签

Setting a Property

使用 SET 子句,可以在节点中创建新属性。

Syntax

以下是设置属性的语法。

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

Example

在继续案例之前,请首先像下面所示的那样创建一个名为 Dhawan 的节点。

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

下面的示例 Cypher 查询用于创建一个名为“highestscore”的属性,其值为“187”。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用程序,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

match player

Result

执行后,您将获得以下结果。您可以在此处观察到,在名为“Dhawan”的节点中创建了一个键值对 highestscore/187 的属性。

key value

Removing a Property

您可以通过将 NULL 作为其值传递来删除现有属性。

Syntax

以下是使用 SET 子句从节点中删除属性的语法。

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

Example

在继续案例之前,请首先像下面所示的那样创建一个“jadeja”节点。

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

下面是一个示例 Cypher 查询,它使用 SET 子句从该节点中删除名为 POB 的属性,如下所示。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

remove property

Result

执行后,您将获得以下结果。您可以在此处观察到,名为 POB 的变量已删除。

deleted pob

Setting Multiple Properties

同样,您可以使用 Set 子句在节点中创建多个属性。为此,您需要用逗号指定这些键值对。

Syntax

以下是使用 SET 子句在节点中创建多个属性的语法。

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

Example

下面是一个示例 Cypher 查询,它在 Neo4j 中使用 SET 子句在节点中创建多个属性。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

multiple properties

Result

执行后,您将获得以下结果。您可以在此处观察到,创建了名为 POB 和 HS 的属性。

executing properties

Setting a Label on a Node

您可以使用 SET 子句将标签设置为现有节点。

Syntax

以下是将标签设置为现有节点的语法。

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

Example

在继续案例之前,请首先像下面所示的那样创建一个“Anderson”节点。

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

以下是一个示例 Cypher 查询,用于使用 SET 子句在节点上设置标签。该查询将标签“player”添加到节点 Anderson 并返回它。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

label node

Result

执行后,您将获得以下结果。您可以在此处观察到,名为“player”的标签已添加到节点。

added player

Setting Multiple Labels on a Node

您可以使用 SET 子句将多个标签设置为现有节点。您需要用冒号“:”将其分隔来指定标签。

Syntax

以下是使用 SET 子句设置现有节点的多个标签的语法。

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

Example

在继续执行示例之前,首先创建一个名为“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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

multi label

Result

执行后,您将得到以下结果。在此,您可以看到两个标签(person 和 player)添加到名为 Ishant 的节点中。

ishant player

Neo4j - Delete Clause

你可以使用 DELETE 子句从数据库删除节点和关系。

Deleting All Nodes and Relationships

以下是使用 DELETE 子句从数据库删除所有节点和关系的查询:

Query

MATCH (n) DETACH DELETE n

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

detach match

这将删除 neo4j 数据库中的所有节点和关系并使其变空。

Deleting a Particular Node

要删除具体节点,您需要在以上查询中将其详细信息指定在“n”的位置。

Syntax

以下是使用 DELETE 子句从 Neo4j 中删除具体节点的语法。

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

Example

在继续举例之前,请按照以下指示在 Neo4j 数据库中创建一个名为“Ishant”的节点。

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

以下是一个使用 DELETE 子句删除上述创建节点的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

particular node

Result

执行后,您将获得以下结果。此处您可以观察到已删除指定节点。

deleted node

Neo4j - Remove Clause

REMOVE 子句用于从图元素(节点或关系)中移除属性和标签。

Neo4j CQL DELETE 和 REMOVE 命令之间的主要区别是 −

  1. DELETE 操作用于删除节点和关联的关系。

  2. REMOVE 操作用于删除标签和属性。

Removing a Property

你可以使用 MATCH 和 REMOVE 子句来删除节点的属性。

Syntax

以下是使用 REMOVE 子句删除节点属性的语法。

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

Example

在继续执行示例之前,创建一个名为 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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

remove ranchi

Result

执行后,你将得到以下结果。在这里,你可以看到名为 POB 的节点已被删除。

remove property result

Removing a Label From a Node

类似于属性,你也可以使用 remove 子句从现有节点中删除标签。

Syntax

以下是用于从节点中删除标签的语法。

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

Example

以下是使用 remove 子句从现有节点中删除标签的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

remove player

Result

执行后,你将得到以下结果。在这里,你可以看到标签已从该节点中删除。

remove result

Removing Multiple Labels

你也可以从现有节点中删除多个标签。

Syntax

以下是从节点中删除多个标签的语法。

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

Example

在继续执行示例之前,创建一个称为 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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

remove multi label

Result

执行后,你将获得以下结果。在这里你可以观察到,指定标签已从该节点中删除。

multi label result

Neo4j - Foreach Clause

FOREACH 子句用于更新列表中的数据,无论这些数据是路径的组件还是聚合的结果。

Syntax

以下是 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)

Example

在继续示例之前,请按如下所示在 Neo4j 数据库中创建一个路径 p

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

以下是一个使用 FOREACH 子句为路径中的所有节点添加属性的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

for each

Result

执行后,您将获得以下结果。

set properties

Verification

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n

此查询返回数据库中的所有节点(我们将在即将到来的章节中详细讨论此查询)。

执行此查询后,将显示创建的节点,如下图所示。

created result

Neo4j - Match Clause

在本章中,我们将了解 Match 子句以及可以用此子句执行的所有函数。

Get All Nodes Using Match

使用 Neo4j 的 MATCH 子句,可以检索 Neo4j 数据库中的所有节点。

Example

在继续执行示例之前,请创建 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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

match return

Result

执行后,您将获得以下结果。

executing result

Getting All Nodes Under a Specific Label

使用 Match 子句,您可以获取特定标签下的所有节点。

Syntax

以下是获取特定标签的所有节点的语法。

MATCH (node:label)
RETURN node

Example

下面是一个返回数据库中带有标签 player 的所有节点的示例 Cypher 查询。

MATCH (n:player)
RETURN n

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

n player

Result

执行后,您将获得以下结果。

specific label

Match by Relationship

您可以使用 MATCH 子句基于关系检索节点。

Syntax

以下是使用 MATCH 子句根据关系检索节点的语法。

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

Example

以下是一个基于关系使用 MATCH 子句来检索节点的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

top scorer

Result

执行后,您将获得以下结果。

match relationship

Delete All Nodes

您可以使用 MATCH 子句删除所有节点。

Query

以下是删除 Neo4j 中所有节点的查询。

MATCH (n) detach delete n

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

desired press

Result

执行后,您将获得以下结果。

deleted relationship

Neo4j - Optional Match Clause

OPTIONAL MATCH 子句用于搜索其中描述的模式,同时对模式的缺失部分使用 null。

OPTIONAL MATCH 与 match 子句相似,唯一的区别是它返回 null 作为模式缺失部分的结果。

Syntax

以下是 OPTIONAL MATCH 与关系的语法。

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

Example

以下就是一个尝试从节点 ICCT2013 中检索关系的 Cypher 查询示例。由于没有这样的节点,所以它返回 null。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

optional match

Result

执行后,你将获得以下结果。你这里可以看到,由于没有与所需模式匹配的对象,所以 Neo4j 返回 null。

pattern required

Neo4j - Where Clause

与 SQL 类似,Neo4j CQL 在 CQL MATCH 命令中提供了 WHERE 子句以过滤 MATCH 查询的结果。

Syntax

以下是 WHERE 子句的语法。

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

Example

在继续执行示例之前,请按照以下方式在数据库中创建五个节点。

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"})

以下是使用 WHERE 子句返回所有属于印度的球员(节点)的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

where player

Result

执行后,您将获得以下结果。

where result

WHERE Clause with Multiple Conditions

您还可以使用 WHERE 子句验证多个条件。

Syntax

以下是具有多个条件在 Neo4j 中使用 WHERE 子句的语法。

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

Example

以下是使用两种条件在 Neo4j 数据库中过滤节点的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

return player

Result

执行后,您将获得以下结果。

condition result

Using Relationship with Where Clause

您还可以使用 Where 子句使用关系来过滤节点。

Example

假设我们有数据库中的以下图表。

assumed database

以下是如下所示使用 WHERE 子句检索印度最高得分的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

winners result

Result

在执行时,您将获得以下结果。在这里,您可以观察到 Neo4j 返回了具有名为印度的节点与国家有 TOP_SCORER_OF 关系的节点。

returned node

Neo4j - Count Function

假设我们在数据库中创建了具有以下详细信息的图表。

count database

Count

count() 函数用于统计行数。

Syntax

如下是计数函数的语法。

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

Example

以下是演示 count() 函数用法的一个 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

count match

Result

执行后,您将获得以下结果。

count result

Group Count

COUNT 子句还用于统计关系类型组。

Example

以下是统计参与每个关系的节点的数量并返回的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

group count

Neo4j - Return Clause

RETURN 子句用来返回 Neo4j 中的节点、关系和属性。在本章中,我们将学习如何 −

  1. Return nodes

  2. Return multiple nodes

  3. Return relationships

  4. Return properties

  5. Return all elements

  6. 使用列别名返回变量

Returning Nodes

可以使用 RETURN 子句返回节点。

Syntax

以下是使用 RETURN 子句返回节点的语法。

Create (node:label {properties})
RETURN node

Example

在继续执行示例之前,请创建 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)

以下是创建一个名为 Dhoni 的节点并返回它的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

return

Result

执行后,您将获得以下结果。

create player

Returning Multiple Nodes

您还可以使用 return 子句返回多个节点。

Syntax

以下是使用 return 子句返回多个节点的语法。

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

Example

以下是使用 return 子句返回多个节点的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

multi node

Result

执行后,您将获得以下结果。在这里你可以观察到 Neo4j 返回了 2 个节点。

create tornament

Returning Relationships

您还可以使用 Return 子句返回关系。

Syntax

以下是使用 RETURN 子句返回关系的语法。

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

Example

以下是一个创建两个关系并返回它们的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

relationship return

Result

执行后,您将获得以下结果。

create winners

Returning Properties

您还可以使用 RETURN 子句返回属性。

Syntax

以下是使用 RETURN 子句返回属性的语法。

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

Example

以下是返回节点属性的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

property return

Result

执行后,您将获得以下结果。

streaming

Returning All Elements

您可以使用 RETURN 子句返回 Neo4j 数据库中的所有元素。

Example

以下是返回数据库中所有元素的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

all elements

Result

执行后,您将获得以下结果。

all elements result

Returning a Variable With a Column Alias

您可以在 Neo4j 中使用 RETURN 子句使用别名返回特定列。

Example

以下是一个将 POB 列作为出生地的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

return column

Result

执行后,您将获得以下结果。

column alias

Neo4j - Order By Clause

您可以使用 ORDER BY 子句按顺序排列结果数据。

Syntax

以下是 ORDER BY 从句的语法。

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

Example

在继续举例之前,请按照以下指示在 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"})

以下是一个使用 ORDERBY 子句按球员得分顺序返回上述创建节点的示例 Cypher 查询。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

return name

Result

执行后,您将获得以下结果。

records

Ordering Nodes by Multiple Properties

您可以使用 ORDEYBY 子句按多个属性整理节点。

Syntax

以下是使用 ORDERBY 子句按多个属性整理节点的语法。

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

Example

以下是一个示例 Cypher 查询,该查询按以下属性对本章前面创建的节点进行整理:得分和国家。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

order by runs

Result

执行后,您将获得以下结果。

ordering nodes

Ordering Nodes by Descending Order

您可以使用 ORDERBY 子句按降序排列数据库中的节点。

Syntax

以下是按降序排列数据库中节点的语法。

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

Example

以下是一个示例 Cypher 查询,该查询使用 ORDERBY 子句按降序排列数据库中的节点。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

descending order

Result

执行后,您将获得以下结果。

order by

Neo4j - Limit Clause

limit 子句用于限制输出中的行数。

Syntax

以下为 LIMIT 子句的语法。

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

Example

在继续举例之前,请按照以下指示在 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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

limit

Result

执行后,您将获得以下结果。

limit result

Limit with expression

您还可以对表达式使用 LIMIT 子句。

Example

以下是限制使用表达式记录的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

expression limit

Result

执行后,您将获得以下结果。

expression result

Neo4j - Skip Clause

SKIP 子句用于定义从哪一行开始包含输出中的行。

Example

在继续示例之前,请像下面一样创建 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"})

以下是返回数据库中跳过前 3 个节点的所有节点的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

skip

Result

执行后,您将获得以下结果。

skip result

Skip Using Expression

你可以使用表达式跳过某个结果的记录。

Example

以下是使用 SKIP 子句和表达式的 Cypher 查询示例。

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

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

skip expression

Result

执行后,您将获得以下结果。

skip expression result

Neo4j - With Clause

可以使用 WITH 子句将查询部分链接起来。

Syntax

以下是 WITH 子句的语法。

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

Example

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

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

return collect

Result

执行后,您将获得以下结果。

collect result

Neo4j - Unwind Clause

unwind 子句用于将列表解压缩成序列行。

Example

以下是解压缩列表的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

return collect

Result

执行后,您将获得以下结果。

collect result

Neo4j - String Functions

和 SQL 一样,Neo4J CQL 提供了一组字符串函数,可以在 CQL 查询中使用它们来获取所需的结果。

在此,我们将讨论一些重要且经常使用的函数。

String Functions List

以下是 Neo4J 中著名的字符串函数列表。

Sr.No

Function & Description

1

UPPER 用于将所有字母变为大写字母。

2

LOWER 用于将所有字母变为小写字母。

3

SUBSTRING 用于获取给定字符串的子串。

4

*Replace*用于将字符串子串替换为给定的子串。

Neo4j - Aggregation Function

与 SQL 类似,Neo4j CQL 在 RETURN 子句中提供了一些聚合函数供使用。它类似于 SQL 中的 GROUP BY 子句。

我们可以在 MATCH 命令中使用这些 RETURN + 聚合函数对一组节点执行操作并返回一些聚合值。

AGGREGATION Functions List

以下列出 Neo4j 中的聚合函数:

Sr.No

Function & Description

1

COUNT 它返回 MATCH 命令返回的行数。

2

MAX 它返回 MATCH 命令返回的一组行中的最大值。

3

MIN 它返回 MATCH 命令返回的一组行中的最小值。

4

SUM 它返回 MATCH 命令返回的所有行的求和值。

5

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

Neo4j - Backup & Restore

在实时应用程序中,我们应该定期备份我们的应用程序数据库,这样我们可以在任何故障时恢复到工作状态。

此规则适用于 RDBMS 和 NoSQL 数据库。

在本节中,我们将讨论两项重要的 DBA 任务。

  1. 如何备份 Neo4j 数据库。

  2. 如何将 Neo4j 数据库还原到特定备份。

Note - 这些步骤仅适用于 Windows 操作系统。我们应该使用类似的命令在其他操作系统中执行相同的步骤。

Neo4j Database Backup

Step 1 - 使用以下路径单击“Neo4j Community” -

Windows “开始”按钮 → “所有程序” → “Neo4j Community” → “Neo4j Community”

默认情况下,它会选择 c:\Users\[username]\Documents\Neo4j\default.graphdb. 但如果我们愿意,我们可以将路径更改为不同的目录。

Step 2 - 在这里我们已经更改为我们的 Neo4j 数据库文件夹。

C:\Ne04j2.0db

community setting

Step 3 - 点击“开始”按钮。

browse stop

服务器启动后,我们可以观察我们的 Neo4j 数据库文件是在指定目录中生成的。

observe directory

在进行数据库备份之前,我们应该做的第一件也是最重要的事情是关闭 Neo4j 数据库服务器。

Step 4 - 点击“停止”按钮关闭服务器。

community setting

Neo4j 数据库文件可在 C:\Ne04j2.0db 中找到。

observe directory

Step 5 - 打开命令提示符。

command prompt

Step 6 − 在 C:\Neo4j 创建一个“Neo4jDbBackup-01”文件夹(此文件夹可以存在于文件系统中的任何位置)。

mkdir C:\Neo4j\Neo4jDbBackup-01
cmd mkdir

它会在指定的“C:\Neo4j\”文件系统位置创建新的“Neo4jDbBackup-01”文件夹。

new directory

Step 7 − 键入以下命令并按 Enter 键。

copy C:\Ne04j2.0db C:\Neo4j\Neo4jDbBackup-01
backup command
copied statements

这意味着我们的文件已复制到所需的目标文件夹。访问该文件夹,并查看该文件夹是否包含我们的数据库文件。

database files

Step 8 − 使用任何 Windows 压缩/解压工具,例如 WinZip、7 Zip 或 WinRAR 来压缩我们的数据库文件夹。

zip folder

Step 9 − 现在已创建我们的 Neo4jDbBackup-01.zip 文件。如果文件系统中存在任何内存限制,请删除“C:\Neo4j\”中的“Neo4jDbBackup-01”文件夹。

memory constraint

Neo4j Database Restore

Step 1 − 关闭数据库服务器。请参阅前面的步骤以关闭服务器。

community setting

Step 2 − 清空当前数据库文件夹。

current database

Step 3 − 使用任何 Windows 压缩/解压工具,例如 WinZip、7 Zip 或 WinRar 来解压我们的备份文件夹。

extracting files

Step 4 − 打开命令提示符并执行以下命令。

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

现在我们可以看到我们的数据库文件夹包含正常工作的备份文件。

Step 5 − 通过单击“开始”按钮启动服务器。

community setting
browse stop

Step 6 − 执行一些 MATCH + RETURN 命令以验证是否已正确还原了数据库。

Neo4j - Index

Neo4j SQL 支持节点或关系属性上的索引以提升应用程序性能。我们可以在具有相同标签名称的所有节点上为属性创建索引。

我们可以在 MATCH 或 WHERE 或 IN 运算符上使用这些索引列以提升 CQL 命令的执行。

在本章中,我们将讨论如何 −

  1. Create an Index

  2. Delete an Index

Creating an Index

Neo4j CQL 提供了“CREATE INDEX”命令在 Node 或 Relationship 属性上创建索引。

Syntax

以下是在 Neo4j 中创建索引的语法。

CREATE INDEX ON:label (node)

Example

在继续执行示例之前,创建节点 Dhawan,如下所示。

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

以下是 Cypher 查询示例,在 Neo4j 中为节点 Dhawan 创建索引。

CREATE INDEX ON:player(Dhawan)

执行上述查询,执行以下步骤:

Step 1 − 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用程序,如下所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

index on

Result

执行后,您将获得以下结果。

added index

Deleting an Index

Neo4j CQL 提供了“DROP INDEX”命令来删除 Node 或 Relationshis 属性的现有索引。

Syntax

以下是在 Neo4j 中创建索引的语法。

DROP INDEX ON:label(node)

Example

以下是 Cypher 查询示例,在 Neo4j 中为名为“Dhawan”的节点创建索引。

DROP INDEX ON:player(Dhawan)

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

drop index

Result

执行后,您将获得以下结果。

remove index

Neo4j - Create Unique Constraint

在 Neo4j 数据库中,CQL CREATE 命令始终会创建新节点或关系,这意味着即使您使用相同的值,它也会插入新行。根据我们的应用程序要求的一些节点或关系,我们必须避免这种重复。为此,我们应使用一些数据库约束在节点或关系的一个或多个属性上创建规则。

与 SQL 类似,Neo4j 数据库还支持节点或关系属性上的 UNIQUE(唯一)约束。UNIQUE 约束用于避免重复记录并强制执行数据完整性规则。

Create UNIQUE Constraint

Neo4j CQL 提供“CREATE CONSTRAINT”命令,用于针对节点或关系属性创建唯一约束。

Syntax

以下是 Neo4j 中创建 UNIQUE 约束的语法。

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

Example

在继续示例之前,如以下所示创建 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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

create unique

Result

执行后,您将获得以下结果。

added constraint

Verification

现在,尝试添加具有冗余 id 值的另一个节点。在这里,我们尝试创建一个 id 为 002 的节点。

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

如果您执行此查询,您将获得以下屏幕截图中显示的错误消息。

node label play

Neo4j - Drop Unique

我们在前一章中已经讨论了使用示例创建 UNIQUE 约束操作。在本章中,我们将讨论删除 UNIQUE 约束操作并提供示例。

Neo4j CQL 提供“DROP CONSTRAINT”命令,用于从节点或关系属性中删除现有的 Unique 约束。

Syntax

以下是 Neo4j 中删除 UNIQUE 约束的语法。

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

Example

以下是删除属性 id 上的 UNIQUE 约束的 Cypher 查询示例。

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

执行上述查询,执行以下步骤:

Step 1 - 打开 Neo4j Desktop App 并启动 Neo4j Server。使用 URL http://localhost:7474/ 打开 Neo4j 的内置浏览器应用,如下面的屏幕截图所示。

browser app

Step 2 - 在美元提示符中复制并粘贴所需的查询,并按播放按钮(执行查询)突出显示在下面的屏幕截图中。

drop constraint

Result

执行后,您将获得以下结果。

removed constraint