Neo4j 简介
Neo4j 是一种高性能的图数据库,用于存储和查询图形数据。它适合于社交网络分析、推荐系统、知识图谱等场景。
Neo4j 图数据库在 macOS 环境下的安装与基本操作。内容包括安装前提(Java 环境、Homebrew),通过官方包或 Homebrew 安装 Neo4j,配置环境变量及启动服务。重点讲解了 Cypher 查询语言的基础用法,涵盖节点的创建、属性与标签管理、关系的建立与修改,以及多种匹配查询(含字符串匹配)和删除操作,帮助用户快速掌握 Neo4j 的核心功能。

Neo4j 是一种高性能的图数据库,用于存储和查询图形数据。它适合于社交网络分析、推荐系统、知识图谱等场景。
Neo4j 需要 Java 运行环境来运行,因此首先需要安装 JDK。可以从 Oracle 官网或 OpenJDK 网站下载并安装适合 Mac 的 JDK 版本。假设你选择的是 Neo4j 5.25.1,应使用 JDK 17 或更高版本;选择的是 Neo4j 4.4.39,应使用 JDK 11。
Homebrew 是 Mac 上的一个包管理器,可以简化安装和管理软件的过程。如果你还没有安装 Homebrew,可以通过在终端中输入以下命令来安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
访问 Neo4j 的官方网站 (最新版本):Neo4j Download,这里下载到的是桌面版,版本一般都是最新的。作者选择的是下面的方式,而不是使用桌面端。

访问 Neo4j 的官网下载 Graph Database,选择 Graph Database 后,向下滑动,根据当前配置选择你自己的版本。

因需要执行的 python 文件应用了一个函数,5.x 不支持,这里选择了更为合适的 4.4.39,下载并解压缩。
然后你在该文件夹下就可以执行 neo4j 命令了。
打开终端,输入以下命令来安装 Neo4j:
brew install neo4j
安装完成后,Neo4j 的可执行文件通常位于 /usr/local/opt/neo4j/bin 目录下。
如果你打算从命令行启动 Neo4j 服务,你可能需要将其可执行文件的路径添加到你的系统 PATH 环境变量中。通常,Neo4j 的可执行文件位于:
/Applications/Neo4j/Desktop.app/Contents/Resources/app/bin 目录下。/bin 目录下。你可以通过以下方式将其添加到 PATH 中(这里以 bash shell 为例):
export PATH="/Applications/Neo4j Desktop.app/Contents/Resources/app/bin:$PATH"
将上述命令添加到你的 ~/.bash_profile 或 ~/.zshrc 文件中(取决于你使用的 shell),然后运行 source ~/.bash_profile 或 source ~/.zshrc 来使其生效。
bash_profile)你可以通过 Spotlight 搜索(按下 Command + 空格,然后输入'Terminal/终端'并回车)来打开终端。

open 命令和默认文本编辑器 (如 TextEdit)open -e ~/.bash_profile
这会使用你的默认文本编辑器(如 TextEdit)打开文件。注意,TextEdit 在打开纯文本文件时可能会以富文本格式显示,这可能会导致格式问题。为了避免这种情况,你可以在 TextEdit 中打开文件后,立即按 Command + Shift + T 切换到纯文本模式。
nano 编辑器nano ~/.bash_profile
这会打开 ~/.bash_profile 文件,你可以在 nano 编辑器中进行编辑。完成后,按 Control + O 保存文件,然后按 Enter 确认文件名,最后按 Control + X 退出编辑器。
导航到你的用户目录,然后启用显示隐藏文件的选项(在 Finder 中按下 Command + Shift + . 可以切换显示/隐藏隐藏文件)最后找到并打开 .bash_profile.save。选择文本编辑器直接修改保存即可。建议在完成操作后立即再次按下 Command + Shift + . 来隐藏这些文件。

如果你使用 Homebrew 安装了 Neo4j,或者已经将 Neo4j 的可执行文件路径添加到 PATH 中,你可以在终端中输入命令 neo4j start 启动 Neo4j:
MacBook-Pro:~ scc$ neo4j start
Directories in use:
home: /Users/scc/AUserProjects/neo4j-community-4.4.38
config: /Users/scc/AUserProjects/neo4j-community-4.4.38/conf
logs: /Users/scc/AUserProjects/neo4j-community-4.4.38/logs
plugins: /Users/scc/AUserProjects/neo4j-community-4.4.38/plugins
import: /Users/scc/AUserProjects/neo4j-community-4.4.38/import
data: /Users/scc/AUserProjects/neo4j-community-4.4.38/data
certificates: /Users/scc/AUserProjects/neo4j-community-4.4.38/certificates
licenses: /Users/scc/AUserProjects/neo4j-community-4.4.38/licenses
run: /Users/scc/AUserProjects/neo4j-community-4.4.38/run
Starting Neo4j.
Started neo4j (pid:14617).
It is available at http://localhost:7474
There may be a short delay until the server is ready.
未添加 PATH,可通过可执行文件的确切位置,你可以使用完整路径来启动它:
MacBook-Pro:~ scc$ /Users/scc/AUserProjects/neo4j-community-4.4.38/bin/neo4j start
Directories in use:
home: /Users/scc/AUserProjects/neo4j-community-4.4.38
...
Starting Neo4j.
Started neo4j (pid:14649).
It is available at http://localhost:7474
There may be a short delay until the server is ready.
如上命令就是启动成功,进程编号都告诉你了,并且可以通过 Neo4j 的 Web 界面 (任意浏览器) 访问 http://localhost:7474,使用默认的用户名 neo4j 和密码 neo4j(首次登录后系统会提示更改密码)。

Neo4j 的 Cypher 查询语言是一套用于构建、查询和操作图数据库的声明式语言。
在 Neo4j 中,图是由节点(Node)、关系(Relationship)和属性(Property)组成的。我们可以创建一个简单的图来练习 Cypher 查询。

CREATE (n {name:"曹操"})
这就表示我们创建成功了,在左侧 Node labels 中未发现该节点。我们执行查询节点是能操作到的。

CREATE (p:Person{name:"曹操"})
执行完后,你就可以看到左侧节点列表有数据了,还包括我们之前创建的节点。
UNWIND 是一种操作,用于将列表中的元素解构为多行。它允许按行访问和处理列表中的每个元素,更多地用于数据导入、转换和过滤等场景。
无标签:
UNWIND [{name: '张辽'}, {name: '关羽'}] AS myNodes
CREATE (n) SET n = myNodes
有标签:如果我们只处理统一标签(Person)节点,我们可以这样的:
UNWIND [{name: '貂蝉'}, {name: '吕布'}] AS myNode
CREATE (n:Person {name: myNode.name})
给已经存在的两个节点创建一个关系。
MATCH (a:Person),(b:Person)
WHERE a.name = '吕布' AND b.name = '貂蝉'
CREATE (a)-[:妻子]->(b)
RETURN r
MATCH (n {name:'吕布'})
SET n.age=18
RETURN n
MATCH (n{name:'关羽'}) SET n:Person RETURN n


Cypher 的 MATCH 语句和 SQL 的 SELECT 语句类似,都是查询数据的表达式。而 Cypher 语句中的 WHERE 和 SQL 语句中的 WHERE 语句由这相同的作用,其作用是用来过滤匹配的节点,在 Cypher 语句中 WHERE 是在 MATCH、OPTIONAL MATCH、WITH 或 START 语句中使用的过滤限定语句。
匹配语句结构
MATCH (n{name:"吕布"}) RETURN n
MATCH (n{age:18}) RETURN n

MATCH (n:Person{name:"吕布"}) RETURN n
MATCH (n) RETURN n
MATCH p = (n)-[r]->(m) RETURN p
MATCH (n)
WHERE n.name STARTS WITH '吕'
RETURN n
MATCH (n)
WHERE n.name ENDS WITH '布'
RETURN n
MATCH (n)
WHERE n.name CONTAINS '吕'
RETURN n
MATCH (n)
WHERE NOT n.name STARTS WITH '吕'
RETURN n

其他还有很多,如字符串正则表达式等,就不一一列举了。
MATCH (n{name:'夏侯淳'}) REMOVE n.age RETURN n
MATCH 语句 用于找到满足条件的节点。在这里,它查找所有标签为 Person 且属性 name 值为 '夏侯淳' 的节点。
MATCH (n{name:'夏侯淳'}) REMOVE n:Person RETURN n
MATCH (p:Person {name: '夏侯淳'})
DELETE p
DELETE 语句 用于删除找到的节点。由于 Neo4j 中的关系是基于节点的,因此删除节点也会删除与该节点相连的所有关系。
仅删除 a=>b 关系 (所有),保留节点。
MATCH (a)-[r]->(b)
WHERE a.name = '节点 A 的名称' AND b.name = '节点 B 的名称'
DELETE r
MATCH (a)-[r]->(b)
WHERE a.name = '吕布' AND b.name = '貂蝉'
DELETE r
删除关系以及至少一端没有其他关系的节点。
MATCH (a)-[r]->(b)
WHERE a.name = '节点 A 的名称' AND b.name = '节点 B 的名称'
DETACH DELETE r
删除节点 a 和 b 以及它们与其他任何节点之间的所有关系。
MATCH (a), (b)
WHERE a.name = '节点 A 的名称' AND b.name = '节点 B 的名称'
DELETE a, b
如果你想要清空整个图数据库,可以删除所有的带有关系的节点及关系。但请注意,这是一个非常危险的操作,因为它会永久删除所有数据。
独立没有关系的节点会被保留下来。
MATCH (n)-[r]-()
DELETE n, r
如果你想要清空整个图数据库,可以删除所有的节点。但请注意,这是一个非常危险的操作,因为它会永久删除所有数据。
MATCH (n) DELETE n
neo4j --versionneo4j statusneo4j restartneo4j stopbrew uninstall neo4jrm -rf /usr/local/var/neo4j
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online