Neo4j 之 Cypher 相关 SQL 汇总
Cypher 语句
Cypher 是图形数据库 Neo4j 的声明式查询语言。
Cypher 语句规则和具备的能力:
- Cypher 通过模式匹配图数据库中的节点和关系,来提取信息或者修改数据。
- Cypher 语句中允许使用变量,用来表示命名、绑定元素和参数。
- Cypher 语句可以对节点、关系、标签和属性进行创建、更新和删除操作。
- Cypher 语句可以管理索引和约束。
Cypher 汇总
节点总数
match (n) return count(n);
关系总数
match p=(n)-[t]->(m) return count(n);
Cypher 查询
随机查询
match p=(n:MAIL)-[t]->(m) return p limit 20
条件查询
根据开始节点,筛选来往关系:
MATCH p=(n:Mail{mail:'test@163.com'})-[send:Send*1..1]->(m:Mail) RETURN p;
MATCH p=(n:Mail)-[send:Send*1..1]->(m:Mail) where n.mail='test@126.com' RETURN p;
来往次数查询
根据来往次数,筛选来往关系:
MATCH (a:MAIL)-[r:SEND]->(b:MAIL) WITH a, b, TAIL (COLLECT (r)) as rr WHERE size(rr)>3 RETURN a,b,rr;
多层级查询
根据条件,关联 3 级:
MATCH p=(a: MAIL{mail:'test@163.com'})-[rels*1..3]-(b) return p limit 100
来往关系
MATCH (p1:MAIL{mail:'test1@163.com'}),(p2:MAIL{mail:'test2@163.com'}),
p=shortestpath((p1)-[rels*..10]-(p2))
where all(t IN rels where t.date>='2020-10-17 00:00:00' and t.date <='2020-10-17 23:59:59') return p
过滤路径
普通过滤:
match p=(n:MAIL)-[t]->(m)
where t.date>='2020-10-23 00:00:00' and t.date <='2020-10-23 23:59:59'
return p limit 20
根据条件,关联 3 级并过滤路径:
MATCH p=(a: MAIL{mail:'test@163.com'})-[rels*1..3]-(b)
where all(t IN rels where t.date>='2020-10-23' and t.date <='2020-10-24')
return p limit 100
需采用 where all (t IN rels where ...) 的方式,否则会报错:
Type mismatch: expected Any, Map, Node, Relationship, Point, Duration, Date, Time, LocalTime, LocalDateTime or DateTime but was List<Relationship>
Cypher 增删
添加 / 更新属性
重新设置所有节点属性:
MERGE (n:Node {name: 'John'})
SET n = {name: 'John', age: 34, coat: 'Yellow', hair: 'Brown'}
RETURN n
修改替换属性 age 和 coat:
MERGE (n:Node {name: 'John'})
SET n.age = 34, n.coat = 'Yellow'
RETURN n
只是增加属性:
MERGE (n:Node {name: 'John'})
SET n += {age: 34, coat: 'Yellow'}
RETURN n
Cypher 删除
删除所有
删除所有节点或关系的标签或属性:
MATCH (a)-[rel]-(b) DELETE a,b,rel;
MATCH (a: Mail_test)-[rel]-(b:Mail_test) DELETE a,b,rel;
删除所有节点:
MATCH (e) DELETE e;
MATCH (e: Mail_test) DELETE e;
参考资料
- https://www.jianshu.com/p/2bb98c81d8ee
相关文章