Neo4j 基础教程(二):Cypher CRUD 完全指南
Neo4j 基础教程(二):Cypher CRUD 完全指南
环境:macOS + Neo4j Browser,此篇简单介绍Cypher的CRUD操作。
准备工作
确认 Neo4j 正在运行,浏览器打开 http://localhost:7474
基础查询:MATCH
查询所有节点
MATCH (n) RETURN n
按标签查询
// 查找所有 Person 节点
MATCH (p:Person) RETURN p// 查找特定属性
MATCH (p:Person {name: 'Alice'}) RETURN p
带条件的查询
// WHERE 子句
MATCH (p:Person)
WHERE p.age >= 25
RETURN p.name, p.age// 多条件
MATCH (p:Person)
WHERE p.age > 25 AND p.name STARTS WITH 'A'
RETURN p
限定返回数量
MATCH (p:Person) RETURN p LIMIT 10
创建:CREATE
创建节点
// 无标签节点
CREATE (n)// 带属性
CREATE (p:Person {name: 'Charlie', city: 'Beijing'})// 一次性创建多个节点
CREATE (a:Dev {lang: 'Python'}),(b:Dev {lang: 'JavaScript'}),(a)-[:WORKS_WITH]->(b)
创建关系
// 假设 Alice 和 Bob 已存在,现在创建关系
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[:KNOWS {year: 2021}]->(b)
带变量的 CREATE
// 创建并返回节点
CREATE (p:Person {name: 'Diana', role: 'Designer'})
RETURN p
更新:SET
更新节点属性
// 精确匹配后更新
MATCH (p:Person {name: 'Alice'})
SET p.age = 31, p.city = 'Shanghai'
RETURN p
添加额外属性
MATCH (p:Person {name: 'Alice'})
SET p.email = 'alice@example.com'
使用 map 更新
MATCH (p:Person {name: 'Bob'})
SET p += {phone: '13800138000', country: 'China'}
删除:DELETE / REMOVE
删除关系
// 先查再删
MATCH (a:Person)-[r:KNOWS]->(b:Person)
WHERE a.name = 'Alice' AND b.name = 'Bob'
DELETE r
删除节点
// 删除节点(需先删除关联关系)
MATCH (p:Person {name: 'Diana'})
DETACH DELETE p
⚠️
DETACH DELETE会同时删除所有关系,最安全
移除属性
// 移除某个属性(用 REMOVE)
MATCH (p:Person {name: 'Alice'})
REMOVE p.age
移除标签
MATCH (p:Person)
REMOVE p:Person
MERGE:防重复插入
// 如果节点已存在则不重复创建
MERGE (p:Person {name: 'Alice'})
RETURN p// 确保关系存在,不重复创建
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
MERGE (a)-[r:KNOWS]->(b)
RETURN r
💡
MERGE=MATCH+CREATE,是插入数据的最佳实践
进阶查询
路径查询
// 查找 Alice 的二级联系人
MATCH (a:Person {name: 'Alice'})-[:KNOWS]->(friend)-[:KNOWS]->(fof)
RETURN friend.name, fof.name
聚合函数
// 统计每种标签的节点数量
MATCH (n)
RETURN labels(n) AS label, count(n) AS count
ORDER BY count DESC
ORDER BY / SKIP
MATCH (p:Person)
RETURN p.name, p.age
ORDER BY p.age DESC
SKIP 2 LIMIT 5
实战小练习:构建社交关系图
// 清空数据
MATCH (n) DETACH DELETE n;// 创建人物
CREATE(alice:Person {name: 'Alice', job: 'Engineer'}),(bob:Person {name: 'Bob', job: 'Designer'}),(carol:Person {name: 'Carol', job: 'Manager'}),(dave:Person {name: 'Dave', job: 'Engineer'}),(eve:Person {name: 'Eve', job: 'Analyst'});// 创建关系
MATCH (a:Person {name:'Alice'}), (b:Person {name:'Bob'}) CREATE (a)-[:KNOWS]->(b);
MATCH (a:Person {name:'Bob'}), (c:Person {name:'Carol'}) CREATE (a)-[:KNOWS]->(c);
MATCH (a:Person {name:'Alice'}), (d:Person {name:'Dave'}) CREATE (a)-[:KNOWS]->(d);
MATCH (a:Person {name:'Carol'}), (e:Person {name:'Eve'}) CREATE (a)-[:KNOWS]->(e);
MATCH (a:Person {name:'Dave'}), (e:Person {name:'Eve'}) CREATE (a)-[:KNOWS]->(e);
练习题
- 查找所有工程师(Engineer)
- 查找 Alice 的直接好友
- 查找 Bob 通过一层关系能认识谁(二度人脉)
- 统计每个人认识多少人
快捷键备忘
| 操作 | 快捷键 |
|---|---|
| 执行查询 | Ctrl+Enter / Cmd+Enter |
| 格式化代码 | Shift+Ctrl+F |
| 清空编辑器 | Ctrl+Delete |
下一步
- 教程三:数据建模与 Python/JavaScript 连接实战
---------------------------------------------------------------
来自博客园的aspnetx宋卫东
