图数据库 之 Neo4j - Cypher语法基础(5)

节点(Nodes)

Cypher使用()来表示一个节点。

() # 最简单的节点形式,表示一个任意无特征的节点,其实就是一个空节点

(movie) # 如果想指向一个节点在其他地方,我们可以给节点添加一个变量名(如movie),表示一个变量名为 movie的节点。

(:Movie) # 表示一个标签为 Movie 的匿名节点

(movie:Movie) # 表示一个变量名为 movie,标签为 Movie 的节点

(movie:Movie {title: "hello"}) # 花括号里定义节点的属性,属性都是键值对

(movie:Movie {title: "hello", released: 1999}) # 多个属性

(movie:Movie:User) # 多个标签,表示一个变量名为 movie,标签为 Movie 和 User 的节点

(movie:Movie), (user:User)  // 表示一个变量名为 movie,标签为 Movie 的节点和一个变量名为 user,标签为 User 的节点

属性可以用来存储信息或者来条件匹配(查找)

创建节点

创建如下节点

CREATE (movie:Movie {title:"功夫熊猫",act:"杰克",release_time:"2024-01-01"});
CREATE (movie:Movie {title:"战狼2",act:"吴京",release_time:"2024-01-01"});
CREATE (user:User {name:"吴京",sex:"男"});
CREATE (user:User {name:"杰克",sex:"男"});

创建完成后,可以看到 Node labels 一共有4个节点,节点类型有 Movie、User。

查看节点

可以分别点击节点进行查看,对应的语法也会显示出来

根据条件查找节点

MATCH (movie:Movie {title:"战狼2"})

RETURN movie

删除节点

MATCH (movie:Movie {title:"战狼2"}) DELETE movie;

更新节点属性

CREATE (movie:Movie {title:"战狼2",act:"吴京",release_time:"2024-01-01"});

返回指定属性

MATCH (movie:Movie)

WHERE movie.title = "战狼2"

SET movie.release_time = "2024-01-10"

RETURN movie.title AS title;

返回全部属性

MATCH (movie:Movie)

WHERE movie.title = "战狼2"

SET movie.release_time = "2024-01-10"

RETURN movie;

节点增加属性

MATCH (n { title: '战狼2' })SET n.comment = '强烈推荐' RETURN n;

节点删除属性

如果设置属性的值是NULL,相当于把该属性从节点或关系中移除

MATCH (n { title: '战狼2' })SET n.comment = null RETURN n;

标签(Labels)

标签用于对节点进行分类,可以将节点进行分组,如吴京和杰克都是演员。一个节点可以没有标签,也可以有多个标签,如吴京可以是演员,也可以是导演、出品人。可以根据标签类型对特定节点进行查询。

创建标签

MATCH (u {name:"吴京"}) set u:演员 return u
MATCH (u {name:"吴京"}) set u:导演 return u
MATCH (u {name:"杰克"}) set u:演员 return u

查找标签

match (n:演员) return n;

match (n:导演:演员) return n;

删除标签

MATCH (u:User {name: '吴京'}) REMOVE u:演员

修改标签

MATCH (n:User {name: '吴京'}) SET n:出品人 REMOVE n:导演

关系(Relationships)

两个节点之间会有关系,添加前后相关信息在数据中。

两个节点之间存在关系,则使用双横杠 -- 和箭头 >, < 的组合来表示。

(a)-->(b) # 表示节点 a 到节点 b 的关系

(a)<--(b) # 表示节点 b 到节点 a 的关系

(a)--(b) # 允许不使用箭头,表示节点 a,b 之间存在关系,不考虑方向性

(a)-->(c)<--(b) # 表示节点 a,b 到节点 c 的关系

同时,Cypher 使用方括号 [] 和冒号 : 为关系赋予变量名与设置标签,使用管道符 | 隔开多个关系标签。

(a)-[r:REL_TYPE]->(b) # 表示一个节点 a 到节点 b 的关系 r,标签为 WRITE

(a)-[r:REL_TYPE1|REL_TYPE2]->(b) # 表示一个节点 a 到节点 b 的关系 r,标签为 WRITE 或者 PARTICIPATE
创建关系

MATCH (u:User {name: '吴京'}), (m:Movie {title: '战狼2'}) CREATE (u)-[:出品]->(m)

MATCH (u:User),(m:Movie)

WHERE u.name = '杰克' AND m.title = "功夫熊猫"

CREATE (u)-[:配音]->(m), (u)-[:演出]->(m)

RETURN u,m

删除关系

match (u:User {name: '杰克'}) - [r:配音] -> (m:Movie {title: '功夫熊猫'}) delete r return u,m

r 表示 关系 的变量

修改关系

MATCH (u:User {name:'杰克'})-[r1:演出]->(m:Movie {title:'功夫熊猫'})

create (u)-[r2:出演]->(m)

set r1 = r2

delete r1

return u,m

r1、r2 表示关系的变量

查询关系

MATCH (u:User {name:'杰克'})-[r1:出演]->(m:Movie {title:'功夫熊猫'}) return u,r1,m

模式(Patterns)

模式是用于定义节点和关系的结构和约束的规则集合。它描述了节点和关系的类型、属性以及它们之间的连接方式。

MATCH (u:User {name:'杰克'})-[r1:出演]->(m:Movie {title:'功夫熊猫'}) return u,r1,m
图展示
表格展示
文本展示
代码展示
路径的表示

Cypher 中 节点-关系-节点 是最基础的路径,可以用()--()表示, 对于较长的路径,Cypher 中使用星号 *,数字和点号 . 来进行表示。

(a)-[*2]->(b) # 表示节点 a,节点 b 之间的路径长度为 2,等价于 (a)-->()-->(b)

(a)-[*3..5]->(b) # 表示节点 a,节点 b 之间的最小路径长度为 3,最大为 5

(a)-[*3..]->(b) # 表示节点 a,节点 b 之间的路径长度至少为 3

(a)-[*..5]->(b) # 表示节点 a,节点 b 之间的路径长度至多为 5

(a)-[*]->(b) # 表示节点 a,节点 b 之间的路径长度为任意
相关推荐
engchina1 天前
Neo4j数据库清理指南:如何安全地删除所有节点和索引
数据库·neo4j
麦麦大数据3 天前
vue+django+neo4j航班智能问答知识图谱可视化系统
django·vue·echarts·neo4j·智能问答·ltp·航班
engchina4 天前
docker 启动 neo4j
docker·容器·neo4j
阿梦Anmory5 天前
[neo4j报错]py2neo.errors.ClientError: [Request.Invalid] Not Found解决方案
neo4j
lisacumt6 天前
【neo4j】 neo4j cypher单一语句 optional 可选操作的技巧
neo4j
qa浪涛9 天前
基于知识图谱的教学案例问答系统
人工智能·django·知识图谱·neo4j
qa浪涛10 天前
基于知识图谱的美食推荐系统
人工智能·python·django·知识图谱·neo4j·美食
qa浪涛11 天前
基于neo4j的医疗问诊系统
python·django·知识图谱·neo4j
qa浪涛12 天前
基于neo4j的新冠治疗和新冠患者轨迹的知识图谱问答系统
人工智能·python·django·知识图谱·neo4j·1024程序员节
qa浪涛12 天前
基于neo4j的体育运动员问答问答系统
人工智能·django·知识图谱·neo4j