Neo4j是一个世界领先,具有完备事务的开源图形数据库。
图形数据库是以图形结构的形式存储数据的数据库。它以节点,关系和属性的形式存储应用程序的数据。正如RDBMS以表的“行,列”的形式存储数据,GDBMS以“图形”的形式存储数据。
图数据库中每个节点都直接包含一个关系列表,关系列表中存放此节点与其他节点的关系记录。这些关系记录按类型和方向组织起来,并且可以保存附加属性。图数据库可以使用此列表直接访问连接的节点,无需进行记录的搜索,匹配计算。
1. 单向关系
1 -> 2 -> 5 -> 9
-> 6
-> 3 -> 7 -> 10
-> 4 -> 8
创建节点和单向关系
create (zhang1:People{name:'zhang1'})
create (zhang2:People{name:'zhang2'})
create (zhang3:People{name:'zhang3'})
create (zhang4:People{name:'zhang4'})
create (zhang5:People{name:'zhang5'})
create (zhang6:People{name:'zhang6'})
create (zhang7:People{name:'zhang7'})
create (zhang8:People{name:'zhang8'})
create (zhang9:People{name:'zhang9'})
create (zhang10:People{name:'zhang10'})
create (zhang1)-[:FOLLOW]->(zhang2)
create (zhang1)-[:FOLLOW]->(zhang3)
create (zhang1)-[:FOLLOW]->(zhang4)
create (zhang2)-[:FOLLOW]->(zhang5)
create (zhang2)-[:FOLLOW]->(zhang6)
create (zhang3)-[:FOLLOW]->(zhang7)
create (zhang4)-[:FOLLOW]->(zhang8)
create (zhang5)-[:FOLLOW]->(zhang9)
create (zhang7)-[:FOLLOW]->(zhang10)
[r:FOLLOW*0..]
:查询的关系深度从0到无止尽
in: 即 a -> b
match p=(a:People) - [r:FOLLOW*0..] -> (b:People) where b.name = 'zhang2' return p
out: 即 b -> c
match p=(b:People) - [rr:FOLLOW*0..] -> (c:People) where b.name = 'zhang2' return p
both: 即 a <-> b <-> c
match p=(a:People) <- [r:FOLLOW*0..] -> (b:People) <- [rr:FOLLOW*0..] -> (c:People)
where b.name = 'zhang9' return p
2. 单双向关系
1 <-> 2 <-> 5 -> 9
-> 6
-> 3 <-> 7 -> 10
-> 4 <-> 8
创建节点和单双向关系
create (zhang1:User{name:'zhang1'})
create (zhang2:User{name:'zhang2'})
create (zhang3:User{name:'zhang3'})
create (zhang4:User{name:'zhang4'})
create (zhang5:User{name:'zhang5'})
create (zhang6:User{name:'zhang6'})
create (zhang7:User{name:'zhang7'})
create (zhang8:User{name:'zhang8'})
create (zhang9:User{name:'zhang9'})
create (zhang10:User{name:'zhang10'})
create (zhang1)-[:FOLLOW]->(zhang2)
create (zhang1)-[:FOLLOW]->(zhang3)
create (zhang1)-[:FOLLOW]->(zhang4)
create (zhang2)-[:FOLLOW]->(zhang1)
create (zhang2)-[:FOLLOW]->(zhang5)
create (zhang2)-[:FOLLOW]->(zhang6)
create (zhang3)-[:FOLLOW]->(zhang7)
create (zhang4)-[:FOLLOW]->(zhang8)
create (zhang5)-[:FOLLOW]->(zhang2)
create (zhang5)-[:FOLLOW]->(zhang9)
create (zhang7)-[:FOLLOW]->(zhang3)
create (zhang7)-[:FOLLOW]->(zhang10)
create (zhang8)-[:FOLLOW]->(zhang4)
MATCH 语句:像SQL语句一样
match (u:User) return u
match (u:User) where u.name='zhang5' return u
match p=(u:User)-[r:FOLLOW]->(uu:User) return p
[r:FOLLOW*0..]
:查询的关系深度从0到无止尽
in: 即 a -> b
match p=(a:User) - [r:FOLLOW*0..] -> (b:User) where b.name = 'zhang2' return p
out: 即 b -> c
match p=(b:User) - [rr:FOLLOW*0..] -> (c:User) where b.name = 'zhang2' return p
both: 即 a <-> b <-> c
match p=(a:User) <- [r:FOLLOW*0..] -> (b:User) <- [rr:FOLLOW*0..] -> (c:User)
where b.name = 'zhang9' return p