Neo4j的安装和基本使用

前言

公司项目中需要展示多个主体之间的关系,直接查询数据库比较复杂。进过调研,发现图数据库可以满足需求。图数据库有很多种,比如百度的HugeGraph,Neo4j,本文先简单说一下一下Neo4j。

一、安装

使用dicker安装neo4j,简单又迅速。

1、拉取镜像

docker pull neo4j:4.2.1

2、启动容器

docker run -d --name=neo4j --publish=7474:7474 --publish=7687:7687 -v $HOME/neo4j/data:/data  neo4j:4.2.1

二、Cypher使用

1、Cypher的基本概念

Cypher是neo4j图数据库的查询语言,类似于mysql的sql语句,但是它允许对图形进行富有表现力和有效的查询和更新

2、Cypher的基本命令和语法

create命令

match命令

merge命令

relationship关系命令

where命令

delete命令

sort命令

字符串函数

聚合函数

index索引命令

2.1、create命令:创建图数据中的节点

创建命令格式

#此处create是关键字,创建节点名称node_name,节点标签node_label,放在小括号里面()

# 后面把所有属于节点标签的属性放在大括号‘{}’里,以此写出属性名,属性值,不同属性用逗号‘,’分割,

# 例如下面命令创建一个节点n,节点标签是Employee,拥有id,name,age三个属性

create (e:Employee{id:1,name:'Bob',age:23})

2.2、match命令:匹配(查询)已有数据

#match命令专门用来匹配查询,节点名称:节点标签,依然放在小括号内,然后使用return语句返回查询结果,和sql很相似

match (e:Employee) return e.name

查询某个顶点的关系有哪些定点

match(n:Employee)-[r:搭档]->(b:Employee) where n.name='Bob' return n,r,b

 

2.3、merge命令:

若节点存在,则等效于match命令;节点不存在,则等效于create命令

merge (e:Employee{id:1,name:'Bob',age:23})

 

2.4、使用create命令创建关系:

必须创建有方向性的关系,否则报错

create (p1:profile1)-[r:buy]-> (p2:profile2)

 

对已有的节点创建关系:

match(e1:Employee),(e2:Employee)where e1.name = 'Bob' and e2.name = 'Bob'  create (e1)-[r:搭档{roles:'manage'}]-> (e2) return e1,r,e2

 

match(e1:Employee),(e2:Employee)where e1.name = 'Bob' and e2.name = 'Bob'  create (e2)-[r:搭档啊{roles:'manage'}]-> (e1) return e1,r,e2

 

创建新的节点和关系:

create (Tom:Employee{id:3,name:'Tom',age:23})

create (Alice:Employee{id:4,name:'Alice',age:23})

create (Tom)-[r:同事{roles:'dept'}] ->(Alice)

 

2.5、使用merge创建关系:可以创建有/无方向的关系

merge(p1:profile1)-[r:miss]-(p2:profile2)

 

match(e1:Employee),(e2:Employee) where e1.name = 'Bob' and e2.name = 'Bob'

merge(e1)-[r:搭档{roles:'manage'}]- (e2) return e1,r,e2

 

2.6、where 命令:类似于sql中添加查询条件

根据自带的id查询

match (e:Employee) where ID(e) = 123 return e.name

根据自定义的id查询

match (e:Employee) where e.id = 123 return e.name

 

2.7、delete命令:删除节点/关系及其关联属性

match (p1:profile1)-[r]-(p2:profile2) delete p1,r,p2

match(e:Employee) where e.id = 123 delete e

 

删除已有关系的节点和关系

match(e:Employee)-[r]-(e2:Employee) where ID(e) = 173 delete e,r

 

删除节点之间的关系

match(e1)-[r]-(e2) where e1.name='Bob' and e2.name='Bob' delete r return r

 

删除节点的属性

MATCH (e:Employee) REMOVE e.id

 

2.8、sort命令:排序使用的是order by

match (e:Employee) return e.id,e.name order by e.id

 

2.9、字符串函数

toUpper() 转为大写

toLower() 转为小写

substring() 截取字符串

replace()

replace(e.name,e.name,e.name + ‘hello’)

原始字段,匹配,要替换的字符串

2.10、聚合函数

count()

max()

min()

sum()

avg()

 

2.11、创建索引和删除索引

create index on:Employee(id)

drop index on:Exployee(id)

 

2.12修改关系属性

match(e1)-[r]-(e2) where ID(e1) = 171 set r.des='小飞侠&大鲨鱼' return e1,r,e2

match(e1)-[r]-(e2) where ID(e1) = 171 set r.des='同事' return e1,r,e2

 

2.13、修改关系

match(n)-[r:搭档啊]->(m) create(n)-[r2:partner]->(m) set r2=r with r delete r

match(n)-[r:搭档]->(m) where ID(n) = 171 create(n)-[r2:partner]->(m) set r2=r with r delete r

 

2.13、创建和删除唯一性约束

CREATE CONSTRAINT ON (e:Employee) ASSERT e.name IS UNIQUE

DROP CONSTRAINT ON (e:Employee) ASSERT e.name IS UNIQUE

你可能感兴趣的:(数据库,neo4j,数据库,图数据库)