Neo4j Cypher Cheatsheet - Neo4j Graph Database Command Reference

把 Neo4j Cypher 查询语言最常用的命令整理成速查,写图查询时对照查。

Databases·40 commands·Last updated 2026-07-21
Back to Databases

创建节点与关系 5

CREATE (n:Person {name: "Alice"})
创建节点
CREATE (a:Person)-[:KNOWS]->(b:Person)
创建关系
CREATE (a:Person {name: "Alice"})-[:KNOWS {since: 2020}]->(b:Person {name: "Bob"})
创建带属性的节点和关系
MERGE (n:Person {name: "Alice"})
存在则匹配,不存在则创建
MERGE (a)-[:KNOWS]->(b) ON CREATE SET a.created = timestamp()
MERGE 带回调

查询与匹配 9

MATCH (n:Person) RETURN n
查询所有 Person 节点
MATCH (n:Person {name: "Alice"}) RETURN n
按属性查询
MATCH (n:Person) WHERE n.age > 18 RETURN n
WHERE 条件过滤
MATCH (a:Person)-[:KNOWS]->(b:Person) RETURN a, b
查询关系
MATCH (a:Person)-[:KNOWS*2]->(b:Person) RETURN a, b
查询 2 跳关系
MATCH (a:Person)-[:KNOWS*1..3]->(b:Person) RETURN a, b
查询 1-3 跳关系
MATCH (n) OPTIONAL MATCH (n)-[:KNOWS]->(m) RETURN n, m
可选匹配(无关系返回 null)
MATCH path = (a)-[*]->(b) RETURN path
查询路径
MATCH path = shortestPath((a)-[:KNOWS*]->(b)) RETURN path
最短路径

WITH 与子查询 5

MATCH (n:Person) WITH n WHERE n.age > 18 RETURN n.name
WITH 过滤传递
MATCH (n:Person)-[:KNOWS]->(m) WITH n, count(m) AS friends RETURN n.name, friends
WITH 聚合传递
UNWIND [1, 2, 3] AS x RETURN x
展开数组为行
CALL { MATCH (n:Person) RETURN n ORDER BY n.name LIMIT 5 } RETURN count(*)
CALL 子查询
MATCH (n:Person) RETURN n.name AS name UNION MATCH (n:Company) RETURN n.name AS name
UNION 合并结果

更新与删除 6

MATCH (n:Person {name: "Alice"}) SET n.age = 30
更新属性
MATCH (n:Person {name: "Alice"}) SET n += {age: 30, city: "Beijing"}
批量更新
MATCH (n:Person {name: "Alice"}) REMOVE n.age
删除属性
MATCH (n:Person {name: "Alice"}) DELETE n
删除节点(必须无关系)
MATCH (n:Person {name: "Alice"}) DETACH DELETE n
删除节点及其所有关系
MATCH (a)-[r:KNOWS]->(b) DELETE r
删除关系

聚合与排序 9

MATCH (n:Person) RETURN count(n)
计数
MATCH (n:Person) RETURN DISTINCT n.city
去重
MATCH (n:Person) RETURN n.name, n.age ORDER BY n.age DESC
排序
MATCH (n:Person) RETURN n.age, count(*) ORDER BY n.age
分组计数
MATCH (n:Person) RETURN collect(n.name)
收集为数组
MATCH (n:Person) RETURN avg(n.age), min(n.age), max(n.age)
聚合函数
MATCH (n:Person) RETURN percentileCont(n.age, 0.5)
中位数(连续百分位)
MATCH (n:Person) RETURN n LIMIT 10
限制返回数量
MATCH (n:Person) RETURN n SKIP 5 LIMIT 10
分页

索引与约束 6

CREATE INDEX ON :Person(name)
创建索引
CREATE CONSTRAINT ON (n:Person) ASSERT n.name IS UNIQUE
唯一约束
CREATE CONSTRAINT ON (n:Person) ASSERT exists(n.name)
存在约束
DROP INDEX ON :Person(name)
删除索引
DROP CONSTRAINT ON (n:Person) ASSERT n.name IS UNIQUE
删除约束
CALL db.indexes()
列出所有索引

💡 Tips

  • MATCH 查询前先用 EXPLAIN 查看执行计划,避免全图扫描。
  • MERGE 比 CREATE 安全,避免重复创建节点。
  • 长路径查询(*1..10)可能很慢,建议加 LIMIT 或用图算法。