图数据库neo4j使用

零、预备备:启动数据库

本机数据库版本 Neo4j 3.5.13
以管理员身份运行控制台(win+A+X),在命令窗口切入到主目录%NEO4J_HOME%\bin
执行neo4j.bat console
进入网址 http://localhost:7474/browser/

一、图数据库介绍

图数据库存储各种数据只用了几个简单的概念:
1)节点 – 图数据记录
相似的节点可以有不同的属性,属性可以是字符串、数字或布尔
2)关系 – 连接节点
关系总是有方向的
3)属性 – 命名的数值
属性是简单的名/值对
一个节点可以有零个或多个标签,标签没有任何属性

  • Neo4j 的 REST API

二、Neo4j 的图查询语言——Cypher使用手册

a)基本格式


MATCH <pattern> WHERE <conditions> RETURN <expressions>

( ) 表示节点

[ ] 表示关系

{ } 表示节点的属性,每个属性通过key:value的形式表示,多个属性之间用逗号隔开

node: label1: label2 通过冒号给节点添加标签,通过冒号分隔多个标签

b)数据类型

boolean:true/false

integer:64位整数

float:64位浮点数

String:Unicode字符串

[ ]:表示数组

c)节点表示方法

() 表示一个最简单的节点,没有标签和属性。
(:label1) 有一个标签的节点
(:label1:label2:label3) 有多个标签的节点
(:label1 {prop1:value1}) 有一个属性的节点
(:label1 {key1:value1,key2:value2}) 有一个标签和节点
(nodeName:label1 {key1:value1}) 这里可以给node起一个别名,但是,这只是一个别名,和节点本身无关,是一个变量,用于后续语句操作该节点,而不是节点的名字。

d)关系

-- 无向关系
<--、--> 有向关系
-[:type]-> 表示一个类型为type的关系
-[:type {key1:value1,key2:value2}] 关系也可以有一个或多个属性。
-[rel:type {key1:value1,key2:value2}] 同节点,这里rel只是关系的一个别名而已。

创建关系时必须有方向,关系也必须有且只有一个类型。

a)新增
新增使用create, 创建节点时将自动为节点生成一个id,id是唯一且递增的。

CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
CREATE 创建数据的子句
() 圆括号表示一个节点
ee:Person 变量 'ee' 和标签 'Person' 代表新的节点
{} 花括号添加属性到节点

b)查找
查找使用match和where, match可以用来匹配模式和简单匹配数据,where用来限定条件。 可以同时查询多个节点并返回。

MATCH (ee:Person)
WHERE ee.name = "Emil"
RETURN ee;

MATCH 指定节点和关系的模式的子句
(ee:Person) 带有标签 "Person" 的单节点模式,将匹配项赋给变量 "ee"
WHERE 约束结果的子句
ee.name = "Emil" 比较 name 属性与 "Emil" 值, 通过.来引用节点的属性
RETURN 用于请求特定结果的子句

c)修改

修改的关键字为SET
格式:
修改节点属性:{{ 查询语句 }} set n.propertKey=newValue;
添加节点标签:{{ 查询语句 }} set n:<label>

d)删除
删除关键词:DELETE,REMOVE

DELETE:删除节点,格式:DELETE <node>
REMOVE:删除节点或关系的标签或属性,格式:REMOVE node.propertyKey,REMOVE node:label

当一个节点有关联关系的时候,是不能被删除的,必须要先删除相关关系。

e)一次创建多条
CREATE子句可以一次创建很多节点和关系。

MATCH (ee:Person)
WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)

f)查找
例如,一个用来查找 Emil 的朋友的模式:

MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil"
RETURN ee, friends
MATCH用于描述从已知节点到找到的节点的模式的子句
(ee)模式以 Person 开始(由 WHERE 限定)
-[:KNOWS]-匹配 "KNOWS" 关系(任意方向)
(friends)将绑定为 Emil 的朋友

g)推荐
模式匹配可以用来做推荐。 Johan 正在学冲浪,因此他想找到一个冲浪的新朋友:

MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer
()空的圆括号表示忽略这些节点
DISTINCT因为不止一条路径将与模式匹配
surfer将包含 Allison, 一个朋友的朋友,且冲浪

一些cypher语句实例
MATCH p =(tom {name:’高血压’})–>()
RETURN p

MATCH (m:Disease)-[r:has_symptom]->(n:Symptom) where n.name = ‘眼胀’ return m.name, r.name, n.name
ref: https://www.cnblogs.com/wenruo/p/7850120.html

Original: https://blog.csdn.net/weixin_43251493/article/details/121081994
Author: 白十月
Title: 图数据库neo4j使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/556814/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球