Neo4j入门到精通

一、下载安装

https://pan.baidu.com/s/1hygHS6_W5rqoAc41V30sTQ 提取码:v5z4

二、修改配置启动

切换到bin目录,输入neo4j.bat console命令之后

三、 增删改查

1、语法说明

括号代表节点、大括号代表对象、中括号代表关系

2、清空数据库

match (n) detach delete n

3、添加4个节点

小写student 可以理解为面向对象的实体
大写Student 可以理解为面向对象的类

create(student:Student{id:1, name: "李雷"});
create(student:Student{id:2, name: "韩梅梅"});
create(teacher:Teacher{id:1, name: "仓老师"});
create(school:School{id: 1, title: "山东蓝翔"});

在这里插入图片描述

4、添加3个关系

match(s:Student{id:1}),(t:Teacher{id:1}) create (t)-[r:教授]->(s);
match(s:Student{id:2}),(t:Teacher{id:1}) create (t)-[r:教授]->(s);
match(s:School{id:1}),(t:Teacher{id:1}) create (t)-[r:就职于]->(s);

在这里插入图片描述

5、更新节点 老师改名字了

match(t:Teacher) 
where t.id=1 
set t.name="小泽老师"

6、删除节点 李雷被开除了

match(s:Student{id: 1}) 
detach delete s;

7、删除关系 小泽老师去别的班级上课了

match (t:Teacher)-[r:教授]->(s:Student) 
where t.id=1 and s.id=2 
delete r

8、索引操作

查看所有索引 
:schema

创建索引
create index on:Student(name)

删除索引
drop index on:Student(name)

创建唯一索引
create constraint on (s:Teacher) assert s.name is unique

删除唯一索引
drop constraint on (s:Teacher) assert s.name is unique

9、修改关系名称

MATCH (p:Person)-[r:投资]->(c:Company)
CREATE (p)-[r2:Invest{name:"投资"}]->(c)
// copy properties, if necessary
SET r2 = r
WITH r
DELETE r

10、事务操作

from py2neo import Graph, Node, Relationship

g = Graph()
tx = g.begin()
a = Node("Person", name="Alice")
tx.create(a)
b = Node("Person", name="Bob")
ab = Relationship(a, "KNOWS", b)
tx.create(ab)
tx.commit()

11、批量导入

movies2.csv.

movieId:ID;title;year:int;:LABEL
tt0133093;'The Matrix';1999;Movie
tt0234215;'The Matrix Reloaded';2003;Movie|Sequel
tt0242653;'The Matrix Revolutions';2003;Movie|Sequel

actors2.csv.

personId:ID;name;:LABEL
keanu;'Keanu Reeves';Actor
laurence;'Laurence Fishburne';Actor
carrieanne;'Carrie-Anne Moss';Actor

roles2.csv.

:START_ID;role;:END_ID;:TYPE
keanu;'Neo';tt0133093;ACTED_IN
keanu;'Neo';tt0234215;ACTED_IN
keanu;'Neo';tt0242653;ACTED_IN
laurence;'Morpheus';tt0133093;ACTED_IN
laurence;'Morpheus';tt0234215;ACTED_IN
laurence;'Morpheus';tt0242653;ACTED_IN
carrieanne;'Trinity';tt0133093;ACTED_IN
carrieanne;'Trinity';tt0234215;ACTED_IN
carrieanne;'Trinity';tt0242653;ACTED_IN
The call to neo4j-admin import would look like this:

12、导入指令

$ bin/neo4j-admin import 
--nodes import/movies2.csv 
--nodes import/actors2.csv
--relationships import/roles2.csv 
--delimiter ";"
--array-delimiter "|" 
--quote "'"

13、复杂查询

13.1 把节点的前两个字为"提示"的节点去除"提示":

match(l) where l.name=~'提示.*' 
with collect(l.name)
as result 
unwind result as row 
return substring(row,2)

13.2 把带提示的节点,更新为不带提示:

match(l) where l.name=~'提示.*' 
with collect(l.name)
as result 
unwind result as row 
match(h) where h.name=row set h.name=substring(row,2)
return h

13.3 分组查询,每个标签的数目,按名字的数目倒排

match(l) 
with collect(l.name) as collectName
unwind collectName as p
return p,count(*)as num order by num desc

13.4 查询不存在emergency属性的疾病

match(d:Disease) where not exists (d.emergency) return d.name

13.5 查询Condition标签中包含"任二"的节点

match(c:Condition) where c.name contains "任二" return c.name

13.6 查询疾病没有high_risk属性的节点

match(d:Disease) where d.high_risk is NULL return d.name

13.7 更新标签名

MATCH (n:User:Teacher) REMOVE n:Student  RETURN n

13.8 更新关系名

MATCH (n:User {name:"foo"})-[r:REL]->(m:User {name:"bar"})
CREATE (n)-[r2:NEWREL]->(m)
SET r2 = r
WITH r
DELETE r

13.9 其他

1.如何找到一个节点x,x以某种关系同时连接两个不同节点a和b
match (a)-[r:relation]->(x)<-[r:relation]-(b) return x

2.如何找到节点a和b之间的最短路径
(1)match p=shortestpath((a)-[r:relation]-(b)) return nodes(p)
(2)match(n:na{name:’###’}),(m:nb{name:’###’})with n,m match p=shortestpath((n)-[r*]-(m)) return p;

3.如何找到节点a和b之间以某种关系相连接的最短路径
p=shortestpath((a)-[r:relationname]->(b)) return nodes(p)

4.找到数据库中出现的唯一节点标签
match n return distinct labels(n)

5.找到数据库中出现的唯一关系类型
match n-[r]-() return distinct type(r)

6.找到数据库中的唯一节点标签和唯一关系类型
match n-[r]-() return distinct labels(n),type(r)

7.找到不与任何关系(或某种关系)向连的节点
start n = node() match n-[r:relationname]-() where r is null return n

8.找到某个带有特定属性的节点
start n=node() match n where has (n.someproperty) return n

9.找到与某种关系相连接的全部节点
start n= node() match n-[r:relationshipname]-() return distinct n

10.找到节点和它们的关系数,并以关系数目降序排列显示
start n=node() match n-[r]-() return n,count(r) as rel_count order by rel_count desc

11.返回图中所有节点的个数
start n = node() match n return count(n)

12.1)删除图中关系:start n=node(*) match n-[r]-() delete r
(2)删除图中节点:start n =node(*) match n delete n
(3)删除图中所有东西:match (n) detach delete n

13.查询某类节点下某属性为特定值的节点
match (n:person)where n.name=”alice” return n

14.with
Cypher中的With关键字可以将前步查询的结果作为后一步查询的条件,这个在我的工作中可是帮了大忙哈哈。下面是两个栗子。
(1match(p:node_se)-[re:推理条件]->(q:node_se) where p.name=‘FEV1%pred’and p.value=<30%’ WITH p,re,q match (q:node_se) <-[re2:推理条件]- (c:node_se)return p, re,q,re2,c
(2match(p:node_patient)-[re:个人情况]->(q:node_se) where p.name=‘qwe’ WITH p,re,q match (q:node_se) -[re2:推荐方案]-> (c:node_se) where q.name=‘first’ WITH p, re,q,re2,c match (c:node_se)-[re3:方案细节]->(d:drugs) return p, re,q,re2,c,re3,d

15.查询符合条件的某个节点的id
match(p) where p.name =***’ and p.value =***return id(p)

16.直接连接关系节点进行多层查询
match(na:bank{id:001})-[re1]->(nb:company)-[re2]->(nc:people) return na,re1,nb,re2,nc

17.可以将查询结果赋给变量,然后返回
match data=(na:bank{id:001})-[re1]->(nb:company)-[re2]->(nc:company) return data

18.变长路径检索
变长路径的表示方式是:[*N…M],N和M表示路径长度的最小值和最大值。
(a)-[ *2]->(b):表示路径长度为2,起始节点是a,终止节点是b;
(a)-[ *35]->(b):表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;
(a)-[ *5]->(b):表示路径长度的最大值是5,起始节点是a,终止节点是b;
(a)-[ *3]->(b):表示路径长度的最小值是3,起始节点是a,终止节点是b;
(a)-[ *]->(b):表示不限制路径长度,起始节点是a,终止节点是b;

19.Cypher对查询的结果进行去重
栗:match(p:node_se)-[re]->(q)where re.name <> ‘and’ return distinct(re.name)
(注:栗子中的<>为Cypher中的操作符之一,表示‘不等于’)

20.更新节点的 labels
Neo4j中的一个节点可以有多个 label,返回所有节点的label:match (n) return labels(n)
修改节点的 label,可以先新加 label,再删除旧的label
match (n:label_old) set n:label_new remove n:label_old
match(n:label_new) return labels(n)

21.更新节点的属性
match(n:) set n.new_property = n.old_property remove n.old_proerty22.根据关系模糊查询match(d:医保手术和操作名称)-[r]->(l) where type(r)=~'医保手术和操作名称禁忌.*'  return d.name,type(r),collect(l.name)

14、springboot集成NEO4J

Pom文件中引入依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
 </dependency>
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Neo4j是一种图形数据库,它可以嵌入到前端中使用。嵌入Neo4j到前端的过程可以通过以下几个步骤实现。 首先,我们需要在前端项目中引入Neo4j的JavaScript驱动程序。Neo4j提供了官方的JavaScript驱动程序,我们可以通过npm或者cdn引入该驱动程序。 然后,我们需要在前端中建立与Neo4j数据库的连接。使用Neo4j提供的驱动程序,我们可以通过指定Neo4j数据库的URL、用户名和密码来建立连接。 连接建立后,我们可以使用Cypher查询语言与Neo4j进行交互。Cypher是Neo4j的查询语言,它可以用于查询、创建、更新和删除图形数据库中的数据。通过编写Cypher查询语句,我们可以在前端中执行这些查询,并获取处理结果。 在前端中使用Neo4j可以实现许多有趣的功能。例如,我们可以通过查询图形数据库中的数据,实现社交网络的关注关系展示;或者利用图形数据库的连接关系特性,构建一些图形化的数据可视化工具。 然而,我们需要注意在前端中使用嵌入式Neo4j时的性能和安全性问题。由于Neo4j是一个较重的数据库,处理复杂查询时可能会影响前端的性能。因此,我们需要合理优化查询,并在前端中使用适当的缓存机制来减轻数据库的负荷。此外,为了保护数据库的安全,我们需要在前端中实施访问控制措施,限制用户对数据库的操作权限。 总结而言,Neo4j可以被嵌入到前端中使用,并通过连接数据库、执行Cypher查询等方式实现与图形数据库的交互。在使用嵌入式Neo4j时,我们需要考虑性能和安全性问题,以便在前端中实现高效且安全的图形数据库应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值