一个简单的Neo4j数据库的样子如下所示:
它包含节点person和movie,关系ACTED_IN和DIRECTED,以及它们的属性name,born,title,released。
最简单的一个Node就像下面的样子:
它包含一个值为Forrest Gump的属性title。
下面再新建2个节点并分别添加2个属性,以及为上一个节点添加一个属性released。
关系是图数据库的一个核心特性。关系连接2个节点,一个是源节点,一个是目标节点。正因为有了关系才使得节点构成了丰富又复杂的结构,可以是:列、树或者复合行的实体。
上图中关系类型有:ACTED_IN
和DIRECTED
。关系ACTED_IN
的属性roles
值为一个数组。
对于ACTED_IN
关系来说,节点Tom Hanks
是源节点,Forrest Gump
是目标节点。我们可以这么形容:节点Tom Hanks
有一个指向关系,Forrest Gump
有一个被指向关系。
关系的方向在搜索的时候是等价的,也就是说是双向的。
关系还可以指向节点自身。
这表示着Tom Hanks KNOWS 他自己。
对于图:
可以得到下表:
上图展示了对于不同的查询角度来说,关系的指向是不同的。
属性具有属性名和值,属性名是一个string,值的类型是:
下图是一个示例:
Label对节点进行标记分成不同的集合或者称为类型。比如对于银行账户标记为:Suspended
就表示这是封存的账户,对蔬菜标记:Seasonal
就表示是当季的。
下面是一个示例:
节点也可以有多个label:
注意节点的label也可能是空的。
命名的时候使用驼峰命名法,比如CarOwner.
图遍历是从一个节点出发查找相邻的节点。 Cypher就是用于图查询的类SQL语言。
依据给定规则搜索到的子图就是一个path:
也可以只是一个节点,此时长度为0
或者长度为1: