Skip to content
鼓励作者:欢迎打赏犒劳

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;

如有转载或 CV 的请标注本站原文地址