目录
随意更新,存档用
Update log:
2024-04-07 12:30: 更正部分不一致样例;新增结点C
及相关查询;新增匿名及多关系查询;新增案例
环境配置
-
Neo4j: 选择正确版本安装,并解压到本地
https://neo4j.com/deployment-center/ -
Java: 安装合适版本Java,不能太低
https://www.oracle.com/java/technologies/downloads/
-
配置环境变量
- 系统变量:
- NEO4J_HOME: D:\Program Files\neo4j-community-X.X.0
- JAVA_HOME: D:\Program Files\Java\jdk-XX
- 路径变量Path:
- %NEO4J_HOME%\bin
- %JAVA_HOME%\bin
- 系统变量:
-
测试命令:
java -version
,安装正确,会返回对应版本neo4j console
,安装正确会启动Neo4j,进入网址http://localhost:7474
,账号密码初始为Neo4j
常用命令
// # 增
// ## 新增结点n
CREATE (n:Person {name : 'Node A', age: 30});
CREATE (n:Person {name : 'Node B', age: 20});
CREATE (n:Person {name : 'Node C', age: 10});
// ## 新增关系r
MATCH (a:Person),(b:Person) WHERE a.name = 'Node A' AND b.name = 'Node B'
CREATE (a)-[r:Follow]->(b);
MATCH (b:Person),(c:Person) WHERE b.name = 'Node B' AND c.name = 'Node C'
CREATE (b)-[r:Follow]->(c);
MATCH (a:Person),(c:Person) WHERE a.name = 'Node A' AND c.name = 'Node C'
CREATE (a)-[r:Follow]->(c);
// # 删
// ## 删除结点n
MATCH (n:Person { name:'Andres' }) DETACH DELETE n;
// ### 清库跑路
MATCH (n) DETACH DELETE n;
// ## 删除关系r
MATCH (a:Person)-[r:Follow]->(b:Person) WHERE a.name = 'Node A' AND b.name = 'Node B'
DELETE r;
// # 改
// ## 更改名字
MATCH (n:Person { name: 'Node A' }) SET n.name = 'Andres';
// ## 更改年龄 `on match set`,不存在则新增'create set`
MERGE (n:Person {name: 'Node C'}) ON CREATE SET n.age = 18
ON MATCH SET n.age = 17;
// # 查
// ## 查询结点
MATCH (n:Person) RETURN n LIMIT 25;
MATCH (:Person { name:'Andres' })-[r:Follow]->(person)
RETURN person.name;
// ## 查询关系
MATCH (a:Person { name:'Andres' })-[r]->(b:Person { name:'Node B' })
RETURN type(r);
// ## 查询最短路径
MATCH (bgn:Person { name:'Andres' }),(end:Person { name:'Node C' }),
p = shortestPath((bgn)-[r:Follow*1..]-(end))
RETURN p;
// ## 其他:A关注的人所关注的人
MATCH ((a:Person { name:'Andres' }-[:Follow] -> ()) <-[]-(person)
return person;
MATCH (:Person {name:'Andres' })-[:Follow*2]->(person)
return person;
// ## 其他:A关注的人及其关注的人所关注的人
MATCH (:Person {name:'Andres' })-[:Follow*1..2]->(person)
return person;
《Graph databases》 案例
Shakespeare
// # 新增结点及关系
CREATE
(billy:User {name:'Billy'}),
(england:Country {name:'England'}),
(greyStreet:Street {name:'Grey Street'}),
(juliusCaesar:Play {title:'Julius Caesar'}),
(newcastle:City {name:'Newcastle'}),
(performance1:Performance {date:20120729}),
(performance2:Performance {date:20061121}),
(performance3:Performance {date:20120730}),
(production1:Production {name:'Julius Caesar'}),
(production2:Production {name:'The Tempest'}),
(review:Review {rating:5, review:'This was awesome!'}),
(rsc:Company {name:'RSC'}),
(shakespeare:Author {firstname:'William',lastname:'Shakespeare'}),
(stratford:City {name:'Stratford upon Avon'}),
(theatreRoyal:Venue {name:'Theatre Royal'}),
(theTempest:Play {title:'The Tempest'}),
(tyneAndWear:County {name:'Tyne and Wear'}),
(billy)-[:WROTE_REVIEW]->(review),
(greyStreet)-[:CITY]->(newcastle),
(newcastle)-[:COUNTY]->(tyneAndWear),
(performance1)-[:PERFORMANCE_OF]->(production1),
(performance1)-[:VENUE]->(theatreRoyal),
(performance2)-[:PERFORMANCE_OF]->(production2),
(performance2)-[:VENUE]->(theatreRoyal),
(performance3)-[:PERFORMANCE_OF]->(production1),
(performance3)-[:VENUE]->(theatreRoyal),
(production1)-[:PRODUCTION_OF]->(juliusCaesar),
(production2)-[:PRODUCTION_OF]->(theTempest),
(review)-[:RATED]->(performance1),
(rsc)-[:BASED_IN]->(stratford),
(rsc)-[:PRODUCED]->(production1),
(rsc)-[:PRODUCED]->(production2),
(shakespeare)-[:BORN_IN]->(stratford),
(shakespeare)-[:WROTE_PLAY {year:1599}]->(juliusCaesar),
(shakespeare)-[:WROTE_PLAY {year:1610}]->(theTempest),
(stratford)-[:COUNTRY]->(england),
(theatreRoyal)-[:STREET]->(greyStreet),
(tyneAndWear)-[:COUNTRY]->(england);
// # 复杂查询:在Newcastle的Theatre Royal(皇家剧院)演奏的关于Shakespeare1608年后相关作品的表演
MATCH (theater:Venue {name:'Theatre Royal'}),
(newcastle:City {name:'Newcastle'}),
(bard:Author {lastname:'Shakespeare'}),
(newcastle)<-[:STREET|CITY*1..2]-(theater)
<-[:VENUE]-()-[:PERFORMANCE_OF]->()
-[:PRODUCTION_OF]->(play)<-[w:WROTE_PLAY]-(bard)
WHERE w.year > 1608
RETURN DISTINCT play.title AS play;
// >>> play
// >>> "Julius Caesar"
// >>> "The Tempest"
// # 复杂查询:在Newcastle的Theatre Royal(皇家剧院)演奏的关于Shakespeare1608年后相关作品的表演统计
MATCH (theater:Venue {name:'Theatre Royal'}),
(newcastle:City {name:'Newcastle'}),
(bard:Author {lastname:'Shakespeare'}),
(newcastle)<-[:STREET|CITY*1..2]-(theater)
<-[:VENUE]-()-[p:PERFORMANCE_OF]->()
-[:PRODUCTION_OF]->(play)<-[WROTE_PLAY]-(bard)
RETURN play.title AS play, count(p) AS performance_count
ORDER BY performance_count DESC;
// >>> play performance_count
// >>> "Julius Caesar" 2
// >>> "The Tempest" 1
// # WITH查询:Shakespeare的作品
MATCH (bard:Author {lastname:'Shakespeare'})-[w:WROTE_PLAY]->(play)
WITH play
ORDER BY w.year DESC
RETURN collect(play.title) AS plays;
// >>> plays
// >>> ["The Tempest", "Julius Caesar"]