图数据库及cypher语句
# 图数据库及cypher语句
# 1.对图数据库的理解
最近工作中偶然使用到了图数据库,对图数据库的概念理解的还是比较模糊。刚开始我理解的节点和边都可以变相的理解为java中的类,标签 就是类的名字,比如 match (n:Person) return n limit 10 这个Person就是类,n就是类实例化后得变量名,但是标签又不完全等同于类,在java中相同名字的类只能有一个,Person可以有多个,这样解释反而有矛盾。过一段时间后我的理解有所改变,Person是标签的值,标签的值可以是Person,也可以是Animal,结合查询语句,可以把标签理解为“条件”,match (n:Person) return n limit 10,用文字描述就是,找出所有标签值是Person的数据,截取10条,将数据赋值给变量n。变量n可以类比为一个java对象,对象中有属性,对应的就是点和边的属性。
# 2.java连接 图数据库
java连接数据库的方式可以参考 Java连接Neo4j的两种方式 - 星朝 - 博客园 (cnblogs.com) (opens new window)
# 3.cypher语句基本使用
———————————————— 版权声明:本文为CSDN博主「简单随风」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lt326030434/article/details/83542676
# 1.查询
简单查询 查询10个Person节点
match (n:Person) return n limit 10
查询Person节点与Phone节点中有HAS_PHONE关系
match (n:Person)-[:HAS_PHONE]->(p:Phone) return n,p
查询10条关系:Person节点与Phone节点中有HAS_PHONE关系,且Person节点的name=‘姓名6’
match (n:Person)-[:HAS_PHONE]->(p:Phone) where n.name="姓名6" return n,p limit 20
多维度查询 查询以下关系:Person节点n和Phone节点p1拥有HAS_PHONE关系,且p1节点与另一个Phone节点p2拥有CALL关系
match (n:Person)-[:HAS_PHONE]->(p1:Phone)-[:CALL]->(p2:Phone)
关系查询 查询任意节点与任意节点间有CALL关系的关系
match p=()-[:CALL]->()
正则查询 查询Users所有节点中,name符合正则’Jack.*'的节点
match (n:Users) where n.name=~'Jack.*' return n
包含查询 查询Users所有节点中,name中包含’J’的节点
match (n:Users) where n.name contains 'J' return n
# 2.创建
简单创建 创建一个Person-LOVES->Dog的关系
create (n:Person)-[:LOVES]->(m:Dog)
属性创建 创建Person-FEAR->Tiger的关系,且Person.name=‘李四’,FEAR.Level=1,Tiger.type=‘东北虎’
create (n:Person{name:"李四"})-[:FEAR(Level:1)]->(M:Tiger{type:"东北虎"})
给两个没有关系的实体创建关系 创建一个关系k,使得name=“王五”的Person与name:"赵六"的Person有KNOW的关系
match (n:Person{name:"王五"}), (m:Person{name:"赵六"})
create (n)-[k:KNOW]->(m) return k
2
有则返回,没有则创建:merge 如果创建的关系已存在,则返回该关系,如果创建的关系不存在,则创建
match (n:Person{name:"王五"}), (m:Person{name:"赵六"})
merge (n)-[k:KNOW]->(m) return k
2
# 3.删除
删除关系 删除name="李四"的Person节点与Tiger节点间的FEAR关系
match (n:Person{name:"李四"})-[f:FEAR]->(M:Tiger)
delete f
2
删除实体 删除name="李四"的Person节点
match (n:Person{name:"李四"})
delete n
2
删除重复节点 如果有多个name=“张三”的People节点,删除只保留一个
match (p:People{name:"张三"}) with p skip 1 delete p
# 4.修改
修改属性 给type="东北虎"的Tiger节点插入age标签,且age的属性为10
match (t:Tiger) where t.type="东北虎" set t.age=10 return t
修改关系名称 将HAS_Phone修改为HAS_PHONE
match (a)-[h:HAS_Phone]->(b)
create (a)-[h2:HAS_PHONE]->(b)
set h2=h
with h
delete h
2
3
4
5
# 5.创建唯一索引
给Phone节点创建唯一索引number
CREATE CONSTRAINT ON (p:Phone) ASSERT p.number IS UNIQUE
- 01
- python使用生成器读取大文件-500g09-24
- 02
- Windows环境下 Docker Desktop 安装 Nginx04-10
- 03
- 使用nginx部署多个前端项目(三种方式)04-10