
neo4j初体验
基本概念
图DB数据模型的主要组成部分有:
- 节点
- 关系
- 属性
常用的命令
删除
写法 | 效果 | 是否推荐 |
---|---|---|
DELETE a, b, rel | 删除 Todd、关系、以及所有和他有关的人 | ❌ 危险!会误删他人 |
DETACH DELETE a | 自动删掉 Todd 的所有关系,再删节点 | ✅✅ 最推荐 |
shell
// 清空所有数据
MATCH (n) DETACH DELETE n
// 只删除 Person 节点及其关系
MATCH (n:Person) DETACH DELETE n
// 删除 name = "张三" 的节点 , 自动删掉 张三 的所有关系,再删节点,DETACH DELETE 推荐写法,很安全
MATCH (n {name: "张三"}) DETACH DELETE n
// 找到名叫 Todd 的人,以及他和其他人之间的所有关系,并把 Todd,对方以及他们之间的关系全部删除
MATCH (a:Person {name:'Todd'})-[rel]-(b:Person) DELETE a,b,rel
创建节点
这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是John。
批量执行需要后面加;
, 创建完之后会自动分配一个id,从0开始。
shell
CREATE (n:Person {name:'John'}) RETURN n;
CREATE (n:Person {name:'Sally'}) RETURN n;
CREATE (n:Person {name:'Steve'}) RETURN n;
CREATE (n:Person {name:'Mike'}) RETURN n;
CREATE (n:Person {name:'Liz'}) RETURN n;
CREATE (n:Person {name:'Shawn'}) RETURN n;
CREATE (n:Location {city:'Miami', state:'FL'});
CREATE (n:Location {city:'Boston', state:'MA'});
CREATE (n:Location {city:'Lynn', state:'MA'});
CREATE (n:Location {city:'Portland', state:'ME'});
CREATE (n:Location {city:'San Francisco', state:'CA'});
创建关系
这里的方括号[]即为关系,FRIENDS为关系的类型。注意这里的箭头-->是有方向的,表示是从a到b的关系
shell
MATCH (a:Person {name:'Liz'}),
(b:Person {name:'Mike'})
MERGE (a)-[:FRIENDS]->(b)
关系也可以增加属性。
在关系中,同样的使用花括号{}来增加关系的属性,也是类似Python的字典,这里给FRIENDS关系增加了since属性,属性值为2001,表示他们建立朋友关系的时间。
shell
MATCH (a:Person {name:'Shawn'}), (b:Person {name:'Sally'}) MERGE (a)-[:FRIENDS {since:2001}]->(b);
MATCH (a:Person {name:'Shawn'}), (b:Person {name:'John'}) MERGE (a)-[:FRIENDS {since:2012}]->(b);
MATCH (a:Person {name:'Mike'}), (b:Person {name:'Shawn'}) MERGE (a)-[:FRIENDS {since:2006}]->(b);
MATCH (a:Person {name:'Sally'}), (b:Person {name:'Steve'}) MERGE (a)-[:FRIENDS {since:2006}]->(b);
MATCH (a:Person {name:'Liz'}), (b:Person {name:'John'}) MERGE (a)-[:MARRIED {since:1998}]->(b);
不同的节点创建关系
我们需要建立不同类型节点之间的关系-人物和地点的关系。 这里的关系是BORN_IN,表示出生地,同样有一个属性,表示出生年份。
shell
MATCH (a:Person {name:'John'}), (b:Location {city:'Boston'}) MERGE (a)-[:BORN_IN {year:1978}]->(b);
MATCH (a:Person {name:'Liz'}), (b:Location {city:'Boston'}) MERGE (a)-[:BORN_IN {year:1981}]->(b);
MATCH (a:Person {name:'Mike'}), (b:Location {city:'San Francisco'}) MERGE (a)-[:BORN_IN {year:1960}]->(b);
MATCH (a:Person {name:'Shawn'}), (b:Location {city:'Miami'}) MERGE (a)-[:BORN_IN {year:1960}]->(b);
MATCH (a:Person {name:'Steve'}), (b:Location {city:'Lynn'}) MERGE (a)-[:BORN_IN {year:1970}]->(b);
查询下所有在Boston出生的人物并且返回地点
shell
MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a, b
增加/修改节点的属性
shell
MATCH (a:Person {name:'Liz'}) SET a.age=34;
MATCH (a:Person {name:'Shawn'}) SET a.age=32;
MATCH (a:Person {name:'John'}) SET a.age=44;
MATCH (a:Person {name:'Mike'}) SET a.age=25;