1、高级语句背景
对于基础的语句,通过
MATCH
,CREATE
,MEGER
,DELETE
,SET
等操作,可以进行简单的操作图谱。在Neo4j中,增删改查(CRUD)操作通过Cypher查询语言来完成。下面是Neo4j中常用的增删改查语句的示例:
1. 1创建(Create)
创建节点
CREATE (n:Person {name: 'Alice', age: 30})
RETURN n
上面这条语句创建了一个标签为Person
的节点,并为其设置了属性name
和age
。
创建关系
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[r:FRIENDS_WITH]->(b)
RETURN r
这条语句创建了一个FRIENDS_WITH
关系连接Alice
和Bob
两个节点。
1.2 查询(Read)
查询节点
MATCH (n:Person {name: 'Alice'})
RETURN n
这条语句查找所有name
属性为Alice
的Person
节点。
查询关系
MATCH (a:Person {name: 'Alice'})-[r:FRIENDS_WITH]->(b:Person)
RETURN a, r, b
这条语句查找Alice
节点与其他Person
节点之间的FRIENDS_WITH
关系,并返回相关节点和关系。
1.3更新(Update)
更新节点属性
MATCH (n:Person {name: 'Alice'})
SET n.age = 31
RETURN n
这条语句将Alice
的age
属性更新为31
。
更新关系属性
MATCH (a:Person {name: 'Alice'})-[r:FRIENDS_WITH]->(b:Person {name: 'Bob'})
SET r.since = 2023
RETURN r
这条语句为Alice
和Bob
之间的FRIENDS_WITH
关系添加或更新since
属性。
1.4删除(Delete)
删除关系
MATCH (a:Person {name: 'Alice'})-[r:FRIENDS_WITH]->(b:Person {name: 'Bob'})
DELETE r
这条语句删除Alice
和Bob
之间的FRIENDS_WITH
关系。
删除节点
MATCH (n:Person {name: 'Alice'})
DELETE n
这条语句删除Alice
节点。
注意:如果要删除的节点有关系存在,必须先删除关系才能删除节点。否则会报错。
强制删除节点及其关系
MATCH (n:Person {name: 'Alice'})
DETACH DELETE n
这条语句会删除Alice
节点以及与其相关的所有关系。
2、定向查询
我们以刘焕勇老师的知识图谱为例,实体和关系都非常多,关系复杂,如果从节点中快速找到结果,这时我们就需要使用路径查询了。
2.1 最短路径查询
比如,我们需要查询心电图和呼吸内科最短路径,可以输入如下语句
![MATCH (a:Check{name:'心电图'}), (b:Department {name:'呼吸内科'})
MATCH p = shortestPath((a)-\[*\]-(b))
RETURN p](https://i-blog.csdnimg.cn/direct/aa3a04aaf3a94295bfc90e5fd796c8ed.png)
2.2 路径总数查询
上面可以看出,最短路径为2,那现在我们可以去查询最长路径为2的的路径有多少条,如下
MATCH (a:Check{name:'心电图'}), (b:Department {name:'呼吸内科'})
MATCH p=(a)-[r*..2]-(b)
RETURN p
当然可以如下查询,结果一样的
MATCH (a:Check{name:'心电图'}), (b:Department {name:'呼吸内科'})
MATCH p=(a)-[r*2]-(b)
RETURN p
但是r*..2
和 r*2
是有区别的,r*..2
为最长路径为2,r*2
为只查询路径为2的路径。
2.3 模糊查询
比如,我们可以从所有节点里面查询含有 肺
这个字的节点,不限制类型。如下
match (a) where a.name =~'.*肺.*' return a
可以看出,有549个节点含有肺
关键字。我们可以进一步查询,如果只是疾病节点呢
match (a:Disease) where a.name =~'.*肺.*' return a
可以看出,疾病节点含肺
的有327个。
3 总结
以上是日常使用最频繁的几种用法,可以举一反三,实现非常多的查询功能。如有疑问。欢迎私信沟通交流。帮忙点赞+关注,谢谢。