关系基础
Neo4j图数据库遵循属性图模型来存储和管理其数据。
根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。
基于方向性,Neo4j关系被分为两种主要类型。
1.单向关系 2.双向关系
在以下场景中,我们使用CREATE命令来创建两个节点之间的关系。这些情况同时适用于单向和双向关系。
1.在两个现有节点之间创建无属性的关系
2.在两个现有节点之间创建与属性的关系
3.在两个新节点之间创建无属性的关系
4.在两个新节点之间创建与属性的关系
5.在具有WHERE子句的两个退出节点之间创建/不使用属性的关系
如图在Customer和CreditCard的关系中:
Customer是从节点(From Node),CreditCard是到节点(To Node)。
对于Customer,Relationship是外向关系;对于CreditCard,Relationship是到达关系。
而对于一个双向关系,等同于在Customer和Creditcard节点之间创建了两个关系:
对现有节点创建没有属性的关系
语法
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
在此语法中,RETURN子句是可选的,当想要立即看到结果,可以使用他。
例如我们创建标签名为XuHuan的x节点,和标签名为FengWeiheng的f节点:
通过以下命令创建x节点和f节点之间的关系IS_HIS_FATHER:
Graph形式下关系如下,可以通过单击节点和关系查看他们的属性。
对现有节点创建有属性的关系
语法
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
例如我们对现有的标签名为FengWeiheng的节点f和标签名为ZangRuiqing的节点f创建关系IS_HIS_SISTER:
Graph形式下关系如下,可以点击关系查看关系的属性。
对新节点创建无属性关系
语法
CREATE
(<node1-label-name>:<node1-name>)-
[<relationship-label-name>:<relationship-name>]->
(<node1-label-name>:<node1-name>)
RETURN <relationship-label-name>
例如我们创建标签名为ZhengJuntai的节点j和标签名为HeShi的节点h创建关系IS_HIS_PET:
Graph形式下关系如下:
对新节点和现有节点创建有属性的关系
对标签名为XiaoBowen的新节点和现有节点标签名为x的XuHuan创建有属性的关系IS_HIS_GRANDSON:
经过一番折腾,博主终于将他和他的朋友们的家谱创建好啦!
检索关系节点的详细信息
语法
MATCH
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
例如我们检索关系为IS_HIS_GRANDSON的两个节点,并返回他们: