基本概念
![](https://img.haomeiwen.com/i4394639/a0f88dc5b3e8b39c.png)
- 节点 Nodes 图数据记录
相似的节点可以有不同的属性 - 关系 Relationships 连接节点
关系总是有方向的
关系总是有一种类型
关系也是可以有属性的 - 属性 Properties 命名数据值
属性可以是字符串、数字或布尔值 - 标签 Labels 关联一组节点
节点可以没有或者有多个标签
标签没有属性
图查询语言Cypher
- 创建节点
CREATE
CREATE (ee:Person {name:"Emil", from:"Sweden", klout:99})
CREATE
创建数据
()
括号表示一个节点
ee:Person
ee表示节点的变量名,Person表示节点的标签
{}
花括号中添加节点的属性
- 查找节点
MATCH
MATCH (ee:Person) WHERE ee.name="Emil" RETURN ee
MATCH
查找节点或关系
(ee:Person)
标签为Person的节点,变量名为ee
WHERE
限定结果
ee.name="Emil"
name属性为Emil
RETURN
返回结果
- 创建更多节点和关系
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)
避免创建重复数据
MERGE
MERGE (mark:Person {name: 'Mark'}) RETURN mark MATCH (j:Person {name: 'Jennifer'}) MATCH (m:Person {name: 'Mark'}) MERGE (j)-[r:IS_FRIENDS_WITH]->(m) RETURN j, r, m
- 查找Emil的朋友
MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil" RETURN ee, friends
- 查找与Johan朋友的朋友中爱好是surfing的人
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer
()
表示忽略的节点
DISTINCT
因为不止一个路径可以匹配该模式
- 了解查询的工作方式
PROFILE
PROFILE MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer
- 删除节点和关系
match (n)-[r]-(n1) delete n,r,n1
match (n) detach delete n
- 删除孤立节点
match (n) delete n
电影图
:play movie-graph
关系数据库--Neo4j
:play northwind-graph
- 从外部CSV文件创建数据
LOAD CSV WITH HEADERS FROM "xxx.csv" AS row
CREATE (n:Labeln)
SET n=row
n.xxx = toFloat(row.xxx)
n.yyy = toInteger(row.yyy)
n.bool = (row.bool<>'0')
- 通过标签索引节点
CREATE INDEX ON :Labeln(LabelnID)
- 将外键引用转换到数据关系
MATCH (p:Product),(c:Category)
WHERE p.categoryID = c.categoryID
CREATE (p)-[:PART_OF]->(c)
- 将联接记录转换为关系
网友评论