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

修改替换属性 agecoat

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