neo4j操作文档


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替换为其他字母或名称。在MATCHRETURN后使用的变量名称只是匹配的节点或关系的别名,可以使用您喜欢的任何有效变量名称。例如,您可以像这样使用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 节点、关系 RDOG 节点。
所以,这个查询的结果将会删除连接 "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表示,这样就避免了变量名的冲突,语法就正确了。

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elik-hb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值