Neo4j数据库操作
标签(Labels) 是用于对节点进行分类的标识符。它可以理解为节点的“类别”或“类型”。通过标签,你可以为节点分组,并定义节点的语义。
节点(Nodes) 是图数据库的基本构建块,表示实体或对象。节点可以包含属性,并通过关系连接到其他节点。
关系(Relationships) 是图中的“边”,用于连接两个节点,表示节点之间的关联或交互。关系可以有方向和属性。
属性(Properties) 是键值对,用于存储节点或关系的附加信息。属性为实体或关系提供了细节。
1.CREATE添加数据
cypher
CREATE (p_zs:Person {id:1, name:"张三", email:"zs@admin.com", position:"研发"})
CREATE (dept_dev:Department { title:"研发组", leader:"李四"})
CREATE (p_zs)-[:BELONGS_TO{join: date("2026-02-01")}]->(dept_dev) // 同一个sql语句中执行
//可独立运行的
MATCH (p:Person {name: "张三"}), (dept:Department {title: "研发组"})
CREATE (p)-[:BELONGS_TO {join: date("2026-02-01")}]->(dept)- <id> 是 Neo4j 的内部标识符,是一个系统生成的、唯一的整数标识符。它不会出现在查询中,也不会被直接定义。
- <elementId> 是 Neo4j 4.4+ 版本中引入的每个节点或关系的稳定标识符,是由 Neo4j 自动生成的字符串(例如
node-123) - p_zs 是一个变量,用于引用创建的
Skill节点。它仅在当前查询中有效,不会存储到数据库中。通过这个变量,你可以在同一个查询中对创建的节点进行操作,例如设置属性、创建关系等
CAUTION
create 重复执行,会创建两条数据
为节点属性添加唯一约束
cypher
CREATE CONSTRAINT person_id_unique IF NOT EXISTS
FOR (p:Person)
REQUIRE p.id IS UNIQUE2.使用 MERGE 实现新增或更新
cypher
MERGE (p_zs:Person {id:1, name:"张三", email:"zs@admin.com", position:"研发"})
MERGE (dept_dev:Department { title:"研发组", leader:"李四"})
MERGE (p_zs)-[:BELONGS_TO{join: date("2026-02-01")}]->(dept_dev)3.使用SET/REMOVE更新属性值
已有数据
cypher
MATCH (n:Person {name: "张三"})
SET n.email = "张三copy", n.updatedAt = datetime()
RETURN ncypher
MATCH (n:Person {name: "张三"})
REMOVE n.email
RETURN n保留现有属性而更新部分字段,可以使用 +=
cypher
MATCH (n:Person {name: "张三"})
SET n.vector += [4.4] // 将新值追加到数组中
RETURN n已有或新增数据
cypher
MERGE (n:Node {name: "ExampleNode"})
SET n.vector = [1.1, 2.2, 3.3], n.updatedAt = datetime()
RETURN n新增或更新节点的部分属性
cypher
MERGE (n:Node {name: "ExampleNode"})
ON CREATE SET n.createdAt = datetime(), n.vector = [1.1, 2.2, 3.3]
ON MATCH SET n.updatedAt = datetime(), n.vector = [4.4, 5.5, 6.6]
RETURN n删除
如果节点没有任何关系,可以直接使用 DELETE 删除该节点。
cypher
MATCH (node:Label {property: value})
DELETE node如果节点有关系,直接使用 DELETE 会报错,因为 Neo4j 不允许删除仍然存在关系的节点。使用 DETACH DELETE 一步删除节点及其关系
cypher
MATCH (a:Person {name: "Alice"})
DETACH DELETE a删除所有节点及其关系
cypher
MATCH (n)
DETACH DELETE n保留一个节点,删除其他重复的节点
cypher
MATCH (n:Person)
WITH n.name AS name, COLLECT(n) AS nodes
WHERE SIZE(nodes) > 1
UNWIND TAIL(nodes) AS toDelete
DETACH DELETE toDelete说明:
COLLECT(n)将具有相同name的节点收集到一个列表中。TAIL(nodes)获取列表中的后续节点(保留第一个节点)。DETACH DELETE toDelete删除重复节点及其关系。
删除边的基本语法
cypher
MATCH (node1)-[relationship:RELATIONSHIP_TYPE]->(node2)
DELETE relationship删除所有某种类型的边
cypher
MATCH ()-[r:BELONGS_TO]->()
DELETE r清空所有数据
cypher
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r查询
cypher
// 查看所有
MATCH (n)-[r]->(m)
RETURN n, r, mcypher
MATCH p=()-[r:BELONGS_TO]->() RETURN p LIMIT 25关于neo4j中的方向
(a)-[:KNOWS]->(b) 表示节点 a "认识" 节点 b在 Cypher 查询中,可以显式指定关系的方向,也可以忽略方向:
//指定方向,匹配所有从节点 a 指向节点 b 的 KNOWS 关系
MATCH (a)-[:KNOWS]->(b)
RETURN a, b
//忽略方向,使用无方向的关系匹配符(--)可以忽略关系的方向。
MATCH (a)-[:KNOWS]-(b)
RETURN a, b注意
社区版本不支持命令create database xxx,只有企业版可以
cypher
//查看数据库
show DATABASE;
//创建新的数据库
CREATE DATABASE dev_portrait_0113;