Neo4j 图数据库使用入门
Neo4j 图数据库的入门指南。内容包括 Windows 和 Docker 环境下的安装步骤,Cypher 查询语言的基础语法(如创建节点关系、匹配查询、属性操作、排序去重等),常用函数与聚合操作,数据备份与恢复方法,复杂路径查询技巧,以及在 Spring Boot 项目中的集成配置。文章提供了详细的代码示例和配置文件说明,适合初学者快速上手 Neo4j 开发。

Neo4j 图数据库的入门指南。内容包括 Windows 和 Docker 环境下的安装步骤,Cypher 查询语言的基础语法(如创建节点关系、匹配查询、属性操作、排序去重等),常用函数与聚合操作,数据备份与恢复方法,复杂路径查询技巧,以及在 Spring Boot 项目中的集成配置。文章提供了详细的代码示例和配置文件说明,适合初学者快速上手 Neo4j 开发。

最新版需要 JDK 17 环境。
下载地址:https://neo4j.com/deployment-center/ 社区版免费,支持 Windows、Linux、Mac 等操作系统。此处以 Windows 为例。
解压下载的压缩包。
直接执行 . eo4j.bat console,会有命令提示。
访问 http://localhost:7474/。
第一次进入页面,默认用户名密码为 neo4j/neo4j,需设置新密码。
登录后可在浏览器界面进行基本操作。
docker pull neo4j:3.5.22-community
docker run -d -p 7474:7474 -p 7687:7687 --name neo4j \
-e "NEO4J_AUTH=neo4j/123456" \
-v /usr/local/soft/neo4j/data:/data \
-v /usr/local/soft/neo4j/logs:/logs \
-v /usr/local/soft/neo4j/conf:/var/lib/neo4j/conf \
-v /usr/local/soft/neo4j/import:/var/lib/neo4j/import \
neo4j:3.5.22-community
Cypher 是 Neo4j 的查询语言,用于创建、查询和更新图数据。
-- 创建带有属性的节点
CREATE (zhangsan:Student {id: 1, name: 'zhangsan', age: 13})
-- 创建 Student 和 Teacher 的图
CREATE (stu:Student)
CREATE (tea:Teacher)
MATCH 需要配合 RETURN 使用。
MATCH (stu:Student)
RETURN stu
不配合 RETURN 或 UPDATE 语句会报错。
-- 示例
MATCH (s:Student)
RETURN s
-- 或者直接返回属性
MATCH (s:Student)
RETURN s.id, s.name, s.age
-- 条件查询
MATCH (emp:Employee)
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp
-- 查询多个,但是没有条件,可以查询后做关系
MATCH (d:Dog), (c:Cat)
WHERE d.name = 'dog1' OR c.name = 'cat1'
RETURN d, c
-- 创建数据
CREATE (d:Dog {id: 1, name: 'dog1', age: 1})
CREATE (c:Cat {id: 2, name: 'cat1', age: 2})
-- 使用新节点创建关系
CREATE (d:Dog)-[r:Like]->(c:Cat)
-- 已知节点 创建带属性的关系 使用 WHERE
MATCH (d:Dog), (c:Cat)
WHERE d.name = 'dog1' AND c.name = 'cat1'
CREATE (d)-[r:love {info: 'loveit'}]->(c)
RETURN r
-- 检索关系详情
MATCH (d)-[r:love]->(c)
RETURN d, r, c
-- 删除节点,如果有关系需要先删除
MATCH (stu:Student)
DELETE stu
-- 删除关系
MATCH (d)-[r:love]->(c)
DELETE r
-- 创建多个标签多个属性
CREATE (m:Movie:Pic {id: '1', name: 'test'})
-- 删除标签
MATCH (m:Movie:Pic)
REMOVE m:Pic
-- 删除属性并返回
MATCH (m:Movie:Pic)
REMOVE m.name
RETURN m
-- 添加属性
MATCH (book:Book)
SET book.title = 'superstar'
RETURN book
-- 默认升序
MATCH (emp:Employee)
RETURN emp.empid, emp.name, emp.salary, emp.deptno
ORDER BY emp.name
UNION 子句将两组结果中的公共行组合并返回到一组结果中,不返回重复行。
-- UNION 合并
MATCH (cc:CreditCard)
RETURN cc.id AS id, cc.number AS number, cc.name AS name, cc.valid_from AS valid_from, cc.valid_to AS valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id AS id, dc.number AS number, dc.name AS name, dc.valid_from AS valid_from, dc.valid_to AS valid_to
UNION ALL 结合并返回两个结果集的所有行,包括重复行。
-- 返回前两行
MATCH (emp:Employee)
RETURN emp LIMIT 2
-- 跳过两行
MATCH (emp:Employee)
RETURN emp SKIP 2
-- 实现分页,跳过 1 行然后返回 2 行
MATCH (emp:Employee)
RETURN emp SKIP 1 LIMIT 2
MERGE 命令是 CREATE 和 MATCH 的组合。如果模式存在则返回,不存在则创建。
-- 语法
MERGE (n:Label {Property1: Value1})
-- 过滤 null
MATCH (e:Employee)
WHERE e.id IS NOT NULL
RETURN e.id, e.name, e.sal, e.deptno
MATCH (e:Employee)
WHERE e.id IS NULL
RETURN e.id, e.name, e.sal, e.deptno
-- 示例
MATCH (e:Employee)
WHERE e.id IN [123, 124]
RETURN e.id, e.name, e.sal, e.deptno
-- 创建索引
CREATE INDEX ON :Customer(name)
-- 删除索引
DROP INDEX ON :Customer(name)
-- 语法
CREATE CONSTRAINT ON (n:Label) ASSERT n.property IS UNIQUE
DROP CONSTRAINT ON (n:Label) ASSERT n.property IS UNIQUE
-- 示例
CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
DROP CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
-- 示例
MATCH (n)
RETURN DISTINCT n.name LIMIT 25
-- 字符串转大写
MATCH (e:Employee)
RETURN e.id, UPPER(e.name), e.sal, e.deptno
-- 字符串转小写
MATCH (e:Employee)
RETURN e.id, LOWER(e.name), e.sal, e.deptno
-- 分隔字符串
MATCH (e:Employee)
RETURN e.id, SUBSTRING(e.name, 0, 2), e.sal, e.deptno
-- 替换字符
MATCH (e:Employee)
RETURN e.id, REPLACE(e.name, 'a', 'z'), e.sal, e.deptno
类似于 SQL 中的 GROUP BY 子句。
获取开始节点、结束节点等关系细节。
# 备份前需要关闭数据库
./neo4j stop
# 导出到文件
./neo4j-admin dump --database=graph.db --to=/home/2024.dump
# 启动数据库
./neo4j start
# 备份前需要关闭数据库
./neo4j stop
# 从文件导入
./neo4j-admin load --from=/home/2024-10-02.dump --database=graph.db --force
# 启动数据库
./neo4j start
MATCH (p1:Person {name: 'Alice'})-[*..3]-(p2:Person)
WHERE p1 <> p2
RETURN p1, p2
MATCH (p1:Person {name: 'Alice'}), (p2:Person {name: 'Bob'})
MATCH path = shortestPath((p1)-[*]-(p2))
RETURN path
MATCH (p1:Person {name: 'Alice'})-[r:FRIEND_OF*..3]-(p2:Person)
WHERE p1 <> p2
RETURN p1, p2, r
MATCH (p1:Person {name: 'Alice'})-[(*..3)]-(p2:Person)
WHERE p1 <> p2 AND ALL(n IN nodes(path) WHERE n:Person)
RETURN p1, p2
MATCH (p1:Person {name: 'Alice'})-[(*..3)]-(p2:Person)
WHERE p1 <> p2 AND ANY(n IN nodes(path) WHERE n.age > 30)
RETURN p1, p2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
# Neo4j 配置
spring.neo4j.uri=bolt://localhost:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=cxf123!!
# 自定义数据存储路径
#dbms.active_database=graph.db
#dbms.directories.data=data
# 允许非本地连接
dbms.connectors.default_listen_address=0.0.0.0
# Bolt 连接器
dbms.connector.bolt.enabled=true
dbms.connector.bolt.listen_address=:7687
# HTTP Connector
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474
# JVM 参数
dbms.jvm.additional=-XX:+UseG1GC
dbms.jvm.additional=-XX:-OmitStackTraceInFastThrow
dbms.jvm.additional=-XX:+AlwaysPreTouch
dbms.jvm.additional=-XX:+UnlockExperimentalVMOptions
dbms.jvm.additional=-XX:+TrustFinalNonStaticFields
dbms.jvm.additional=-XX:+DisableExplicitGC
dbms.jvm.additional=-Djdk.tls.ephemeralDHKeySize=2048

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
查找任何按下的键的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