下文内容参考了neo4j的示例代码
1.插入结点和关系
属性名可以有0个(直接省略花括号及其内容)或多个(在花括号内用逗号隔开),一个属性名也可以对应多个属性值(在[]数组中用逗号隔开,字符串要加单引号)
1.1创建实例
CREATE (实例名:所属类名 {属性名:属性值, 属性名:属性值})
1.2创建关系
(实例名1)-[:关系名 {属性名:['属性值1','属性值2']}]->(实例名2)
1.3示例
只粘贴了一部分代码
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
CREATE (JoelS:Person {name:'Joel Silver', born:1952})
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix)
2.查询结点
2.1按类查询结点
//寻找10个Person类结点,用people返回,并且输出属性name的值
2.2按属性值查询结点
//寻找属性name的值为"Tom Hanks"的任意类结点,并且用tom返回
MATCH (tom {name: "Tom Hanks"}) RETURN tom
//寻找1990~2000之间的Movie类结点,保存到nineties中,并且返回title属性值
MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties.title
2.3按属性值+关系查询结点
2.3.1查找直接互连结点
//按属性值查找结点tom,再按照关系查询tom指向的结点,保存到tomHanksMovies中。
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies
//按属性值查找cloudAtlas,再按照关系查询指向cloudAtlas的结点保存到directors中
MATCH (cloudAtlas {title: "Cloud Atlas"})<-[:DIRECTED]-(directors) RETURN directors.name
//查找与某类结点以任意关系相关联的另一类结点
MATCH (people:Person)-[relatedTo]-(:Movie {title: "Cloud Atlas"}) RETURN people.name, Type(relatedTo), relatedTo
2.3.2查找非直接互联结点
//tom以某种关系指向m,查找以某种关系指向m的其他结点,保存到coActor中
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) RETURN coActors.name
//查找二层不互联结点,即find co-co-actors who haven't worked with Tom Hanks
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
(coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cocoActors)
WHERE NOT (tom)-[:ACTED_IN]->()<-[:ACTED_IN]-(cocoActors) AND tom <> cocoActors
RETURN cocoActors.name AS Recommended, count(*) AS Strength ORDER BY Strength DESC
//Movies and actors up to 4 "hops" away from Kevin Bacon
MATCH (bacon:Person {name:"Kevin Bacon"})-[*1..4]-(hollywood)
RETURN DISTINCT hollywood
2.3.3寻找某两个节点之间的全部中间结点
//Find someone to introduce Tom Hanks to Tom Cruise
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
(coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cruise:Person {name:"Tom Cruise"})
RETURN tom, m, coActors, m2, cruise
2.3.4两节点之间的最短路径
//Kevin Bacon~Meg Ryan
MATCH p=shortestPath(
(bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})
)
RETURN p
2.3.5查询关系
match (Laurence:Person{name:"Laurence Fishburne"})-[f:ACTED_IN]->(TheMatrix:Movie{title:"The Matrix"}) return f
3.删除
3.1删除关系
//Laurence~TheMatrix:Movie
match (Laurence:Person{name:"Laurence Fishburne"})-[f:ACTED_IN]->(TheMatrix:Movie{title:"The Matrix"})
delete f
3.2删除节点(要先删除该节点相关联的关系)
match (Laurence:Person{name:"Laurence Fishburne"}) delete Laurence
3.3快速清空数据库
MATCH (n)
DETACH DELETE n
4.修改
4.1为结点添加标签
//将结点e设置为cute类,e将同时为Person类和cute类
MATCH (e {name:"Keanu Reeves"}) set e:cute return e
4.2为结点修改属性
MATCH (e {name:"Keanu Reeves"}) set e.born=2020 return e
4.3为结点添加新属性
MATCH (e {name:"Keanu Reeves"}) set e.sex='male' return e