本机数据库版本 Neo4j 3.5.13
以管理员身份运行控制台(win+A+X),在命令窗口切入到主目录%NEO4J_HOME%\bin
执行neo4j.bat console
进入网址 http://localhost:7474/browser/
图数据库存储各种数据只用了几个简单的概念:
1)节点 - 图数据记录
相似的节点可以有不同的属性,属性可以是字符串、数字或布尔
2)关系 - 连接节点
关系总是有方向的
3)属性 - 命名的数值
属性是简单的名/值对
一个节点可以有零个或多个标签,标签没有任何属性
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