Chaos2018

图数据库及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)

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

有则返回,没有则创建:merge
如果创建的关系已存在,则返回该关系,如果创建的关系不存在,则创建

match (n:Person{name:"王五"}), (m:Person{name:"赵六"})
merge (n)-[k:KNOW]->(m) return k

3.删除
删除关系
删除name="李四"的Person节点与Tiger节点间的FEAR关系

match (n:Person{name:"李四"})-[f:FEAR]->(M:Tiger)
delete f

删除实体
删除name="李四"的Person节点

match (n:Person{name:"李四"})
delete n

删除重复节点
如果有多个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

5.创建唯一索引
给Phone节点创建唯一索引number

CREATE CONSTRAINT ON (p:Phone) ASSERT p.number IS UNIQUE

posted on 2022-04-08 16:28  Chaos2018  阅读(81)  评论(0编辑  收藏  举报

导航