Neo4j 图数据库使用入门
档详细介绍了 Neo4j 图数据库的安装部署(Windows 与 Docker)、CQL 查询语言的基础语法(创建、查询、更新、删除、合并等)、内置函数应用、数据备份与恢复策略、复杂路径查询技巧以及 Spring Boot 集成配置方法。内容涵盖从环境搭建到实际开发的核心知识点,适合后端开发者快速上手图数据库技术。

档详细介绍了 Neo4j 图数据库的安装部署(Windows 与 Docker)、CQL 查询语言的基础语法(创建、查询、更新、删除、合并等)、内置函数应用、数据备份与恢复策略、复杂路径查询技巧以及 Spring Boot 集成配置方法。内容涵盖从环境搭建到实际开发的核心知识点,适合后端开发者快速上手图数据库技术。

最新版需要 JDK 17 环境。
下载地址:https://neo4j.com/deployment-center/ 社区版免费,支持 Windows、Linux、Mac 等操作系统。此处以 Windows 为例。
直接解压安装包即可。
执行 neo4j.bat 启动服务。
访问 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 Query Language (CQL) 是 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
-- 返回节点对象
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
-- 使用已知节点创建带属性的关系
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
-- 删除属性
MATCH (m:Movie:Pic)
REMOVE m.name
RETURN m
-- 删除标签
MATCH (m:Movie)
REMOVE m:Pic
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 ALL 保留重复行。
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
-- 返回前两行
MATCH (emp:Employee)
RETURN emp LIMIT 2
-- 跳过两行
MATCH (emp:Employee)
RETURN emp SKIP 2
-- 分页
MATCH (emp:Employee)
RETURN emp SKIP 1 LIMIT 2
MERGE 是 CREATE 和 MATCH 的组合,若存在则匹配,不存在则创建。
MERGE (n:Profile {id: 1, name: 'Alice'})
-- 过滤 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 (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 UPPER(e.name)
-- 转小写
MATCH (e:Employee)
RETURN LOWER(e.name)
-- 截取字符串
MATCH (e:Employee)
RETURN SUBSTRING(e.name, 0, 2)
-- 替换字符
MATCH (e:Employee)
RETURN REPLACE(e.name, 'a', 'z')
类似于 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>
spring.neo4j.uri=bolt://localhost:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=cxf123!!
主要配置项包括数据存储路径、网络端口、认证开启状态、日志配置及 JVM 参数等。
# 数据库名称
dbms.active_database=graph.db
# 数据路径
dbms.directories.data=data
# 允许非本地连接
dbms.connectors.default_listen_address=0.0.0.0
# Bolt 协议端口
dbms.connector.bolt.listen_address=:7687
# HTTP 协议端口
dbms.connector.http.listen_address=:7474
# 禁用身份验证(开发环境慎用)
# dbms.security.auth_enabled=false
# Java 堆大小
dbms.memory.heap.initial_size=512m
dbms.memory.heap.max_size=512m
# G1GC 垃圾回收器
dbms.jvm.additional=-XX:+UseG1GC
以上为 Neo4j 核心配置参考,详细文档请查阅官方手册。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online