title: Neo4j操作文档
date: 2023-10-14 13:35:49
categories:
- neo4j
tags:
NoSQL数据库原理与应用
第七章 其他NoSQL数据库简介
图数据库 Neo4j
图形数据库
将数据存储为顶点和边的数据存储模式,也可以称此关系为网络。社交网络分析,地理空间分析,基于商品、购买行为的推荐系统。应用图形方式存储实体之间关系信息的数据库.
图数据库与关系数据库
关系型数据库:实体表:person表,film表,company表等。关系表:实体间的关系。关联表简单维护实体关系,导致数据库执行效率地下。随着实体增多,关联表数量急剧上升,导致数据库表异常繁琐.
图数据库:节点:实体。边:实体间关系。处理复杂关系时,效率更高,维护更方便.
Neo4j简介
基于Java语言开发的开源图数据库系统。强大的图处理和查询搜索能力。专业的Cypher语言,完成各类操作。具有图形操作界面和可视化展示组件等配套工具。轻易扩展到上线级别的节点和关系。支持事务机制,提供数据强一致性. 官方网址:https://neo4j.com/.
Neo4j数据模型
- 节点
- 关系
Neo4j数据模型
属性<key, value>
- key: string
- value: boolean, byte, short, int, long, char, string, chat[]等
Neo4j安装与使用
- 下载:官方地址:https://neo4j.com/download/,选择社区版下载。
- 解压:
tar -xzvf neo4j-community-3.5.1-unix.tar.gz
- 启动:切换至Neo4j目录
/bin/neo4j console
终端应用启动/bin/neo4j start
后台程序
在浏览器中打开:http://localhost:7474/,初始用户为neo4j,密码为neo4j.
Cypher操作语言
Cypher语言:图数据库数据操作语言。支持节点与关系的定义,修改,删除和查询等功能。命令大小写不敏感,但对属性值,标签,关系类型和变量是区分大小写的. 语句末尾可以加上分号结尾,也可以不加. 字符串值需要用引号包括,单双引号均可.
创建节点
格式:create (node_name:lable_name {property1_name:property1_value, p2:v2, p3:v3});
示例:
- 创建DOG类的节点:
create (dog:DOG{name:"snoopy",age:6});
- 创建Person类节点:
create (person:Person{name:"Tom",age:18});
- 创建标签为PET和CAT类节点:
create (n:CAT:PAT{name:"jerry",age:3});
Cypher操作语言
查询节点
示例:
- 查询所有节点:
match (n) return n
- 查询标签为DOG的节点并将结果以name属性进行排序,并限制返回10个结果:
match (n:DOG) return n order by n.name limit 10
- 查询指定标签,属性的节点:
match (n:DOG) where n.name= 'snoopy' return n
Cypher操作语言
创建关系
示例:
- 为例1中的person节点和dog节点创建关系:
match (person:Person),(dog:DOG) where person.name="Tom" and dog.name="snoopy" create (person)-[r:R{isOwner:"yes"}]->(dog) return r
- 新建节点的同时创建关系:
create (a:Person{name:"harry",age:"8"})-[r:R{isOwner:"yes"}]->(b:CAT{name:"tom",age:1})
查询关系
示例:
- 查询例3中a节点和b节点之间的关系:
match (a:Person)-[r:R]->(b:CAT) where a.name="Harry" and b.name="tom" return r
Cypher操作语言
Delete:删除节点,关系
示例:
- 删除节点:
match (n:Person) where n.name="tom" delete n
- 删除标签为CAT的节点:
match (a:CAT) delete a
- 删除所有A\B之间的R关系:
match (a:Person)-[r:R]->(b:CAT) delete r
- 同时删除关系和节点:
match (a:Person)-[r:R]->(b:B) delete a,b,r
Cypher操作语言
remove:删除节点或关系的属性
示例:
- 删除节点的属性:
match (n:Person) where n.name="tom" remove n.age
- 删除节点a与节点b的关系R的isOwner属性:
match (a:Person)-[r:R]->(b:CAT) where b.name="tom" remove r.isOwner
Cypher操作语言
set:修改节点或关系属性
示例:
- 修改节点的属性:
match (n:Person) where n.name='jim' set n.name="harry" return n
- 添加节点属性:
match (n:Person) where n.name='jim' set n.sex="male" return n
- 修改或添加节点属性:
match (a:CAT)<-[r:R]-(b:Person) set r.has="2"
小结
- 图数据库特点
- Neo4j数据模型
- Neo4j安装
- Neo4j使用
官方文档:https://neo4j.com/.
其他
您可以在Cypher查询中将变量n替换为其他字母或名称。在MATCH和RETURN后使用的变量名称只是匹配的节点或关系的别名,可以使用您喜欢的任何有效变量名称。例如,您可以像这样使用m代替n:
例如(n:CAT)这里的n只是别名
创建节点
create(n:CAT:PAT{name:"jerry",age:3,like:"pepole"});
create(person:Person{name:"Tom",age:18});
create (dog:DOG{name:"snoopy",age:6,love:"pepole",dislike:"regtable"});
查询所有节点
MATCH (DOG) RETURN DOG LIMIT 25
MATCH (Person) RETURN Person LIMIT 25
match (N) return N输出一模一样
match (n:DOG) return n order by "snoopy" limit 10
match (DOG) return DOG order by "snoopy" limit 10这个是(全部)
和match (n:DOG) return n order by "snoopy" limit 10输出不同(这个是之查看这个)
查询标签为DOG的节点并将结果以name属性进行排序,并限制返回10个结果。
match (n:DOG) return n order by n.name limit 10
查询指定标签,属性的节点
match (n:DOG) where n.name= 'snoopy' return n
match (person:Person),(dog:DOG)
where person.name="Tom" and dog.name="snoopy"
create (person)-[r:R{isOwner:"yes",loveEach:"yes"}]->(dog)
return r
r可改,R可改,里面的关系可以多加
a节点和b节点之间的关系
match (a:Person)-[r:R]->(b:CAT)
where a.name="Harry" and b.name="tom"
return r
例如求关系
match (persion:Person)-[r:R]->(dog:DOG)
where persion.name="Tom" and dog.name="snoopy"
return r
这样也可以
match (a:Person)-[r:R]->(b:DOG)
where a.name="Tom" and b.name="snoopy"
return r
删除节点
match (n:Person) where n.name="tom" delete n
删除节点前要先删除关系
删除标签为CAT的节点
match (a:CAT) delete a
这也可以
match (n:CAT) delete n
删除所有满足条件的 Person 节点和 DOG 节点之间的关系 r。
match (a:Person)-[r:R]->(b:DOG) delete r
match (a:Person)-[r:R]->(b:DOG) delete a,b,r
在这个Cypher查询中,(a:Person)-[r:R]->(b:DOG) 的部分描述了一个模式匹配,其中:
(a:Person) 表示查找带有 "Person" 标签的节点,将其命名为 a。
[r:R] 表示查找具有 "R" 类型的关系,将其命名为 r。
(b:DOG) 表示查找带有 "DOG" 标签的节点,将其命名为 b。
整个查询的目的是删除符合这个模式的节点和关系,即删除满足条件的 Person 节点、关系 R 和 DOG 节点。
所以,这个查询的结果将会删除连接 "Person" 和 "DOG" 的 "R" 类型的关系,以及相关的节点。这通常表示将 "Person" 和 "DOG" 之间的关系从数据库中移除。
删除节点的属性
match (n:Person) where n.name="Tom" remove n.age
删除节点a与节点b的关系R的isOwner属性
match (a:Person)-[r:R]->(b:CAT) where b.name="Tom" remove r.isOwner
修改节点的属性
match (n:Person) where n.name='jim' set n.name="harry" return n
2,添加节点属性
match (n:Person) where n.name='jim' set n.sex="male" return n
3,修改或添加节点属性
match (a:CAT)<-[r:R]-(b:Person) set r.has="2"
match (a:CAT)<-[r:R]-(a:Person) set r.has="2"
match (a:CAT)<-[r:R]-(a: Person) set r.has="2"这样是不是语法报错
是的,Cypher查询有一个语法错误。在您的查询中,您使用了相同的变量名a来匹配CAT节点和Person节点。这会导致冲突。要修正这个问题,您可以使用不同的变量名,例如:
MATCH (cat:CAT)<-[r:R]-(person:Person) SET r.has = "2"
在这个修正后的查询中,我们将CAT节点用cat表示,将Person节点用person表示,这样就避免了变量名的冲突,语法就正确了。