在图数据库中,最重要的部分就是关系。
根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。
单向关系
双向关系
但是,在Neo4j中,关系只能是单向箭头,如果想要表示双向关系,我们可以头尾节点调换位置再CREATE一个关系。
一、关系创建大致可以分为以下几种:
- 在两个现有的节点之间创建无属性的关系
- 在两个现有的节点之间创建有属性的关系
- 在两个新节点之间创建无属性的关系
- 在两个新节点之间创建有属性的关系
- 在具有WHERE子句的两个退出节点之间创建/不使用属性的关系
第一种情况:
我们使用CQL MATCH命令检索现有的两个节点和CQL CREATE命令,以创建它们之间的新关系。
MATCH (e:Customer),(cc:CreditCard)
CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc)
这里关系名称为“DO_SHOPPING_WITH”
关系标签为“r”。
e和Customer分别是客户节点的节点名称和节点标签名称。
cc和CreditCard分别是CreditCard节点的节点名和节点标签名。
结果如下:
第二种情况:
我们使用CQL MATCH命令检索现有的两个节点和CQL CREATE命令,以创建它们之间的新关系以及关系的属性。
MATCH (cust:Customer),(cc:CreditCard)
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
这里关系名称为“DO_SHOPPING_WITH”
关系标签为“r”。
shopdate和price是关系“r”的属性。
由于我添加了return r,这里就返回了关系的属性:
第三种情况:
我们直接使用Pattern语法进行新节点,新关系的创建。
CREATE (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2)
这样就一次性创建了两个节点和一个关系
得到的结果如下:
由于这里的节点和关系都是没有属性的,所以显示出来默认是id
第四种情况
创建方式与上面一样,这里就直接给出例子。
CREATE (video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})
-[movie:ACTION_MOVIES{rating:1}]->
(video2:YoutubeVideo2{title:"Action Movie2",updated_by:"Xyz",uploaded_date:"12/12/2012"})
这里的关系名称是“ACTION_MOVIES”
关系标签是“电影”。
video1和YoutubeVideo1分别是“From Node”的节点名和节点标签名。
video2和YoutubeVideo2分别是“To Node”的节点名和节点标签名。
再看下面:
这就代表我们创建的属性,以表格的形式展现。
第五种情况我在此就不做介绍,大家可以去w3cschool上面自行学习,另外官方文档也非常好。
学习资料
w3c的链接:https://www.w3cschool.cn/neo4j/? 官方文档的链接:https://neo4j.com/docs/