Neo4j是一个Java开发的图数据库,它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。相对于关系数据库来说,图数据库善于处理大量复杂、互连接、低结构化的数据,这些数据变化迅速,需要频繁的查询——在关系数据库中,这些查询会导致大量的表连接,因此会产生性能上的问题。Neo4j重点解决了拥有大量连接的传统RDBMS在查询时出现的性能衰退问题。Neo4j还提供了非常快的图算法、推荐系统和OLAP风格的分析,而这一切在目前的RDBMS系统中都是无法实现的。它提供了广泛使用的REST接口,能够方便地集成到基于JAVA、PHP、.NET和JavaScript的环境里。
创建节点
CREATE (ee:员工 { 姓名: "张勇", 来自: "中国" , 年龄 : 99 })
- 通过CREATE创建一个节点
- () 代表一个节点
- ee:员工 变量\'ee\',标签label是 \'员工\'
- {} 包含了属性
自己动手写个Demo试试
CREATE (p1:Person {name:\'胡兴炯\', born:1991, interest:\'mac,ios,旅游\', goodat:\'java,swift,objectiveC\'})
CREATE (p2:Person {name:\'张勇\', born:1990, interest:\'android\', goodat:\'java,android\'})
CREATE (p3:Person {name:\'成文龙\', born:1990, interest:\'linux,hadoop\', goodat:\'linux,java,android\'})
CREATE (p4:Person {name:\'王昕\', born:1978, interest:\'wpf,noSQL,旅游\', goodat:\'java,c#\'})
CREATE (p5:Person {name:\'周开琪\', born:1977 , interest:\'管理\', goodat:\'管理,\'})
CREATE (p6:Person {name:\'徐锦亮\', born:1985, interest:\'前端\', goodat:\'前端,html5\'})
CREATE (p8:Person {name:\'徐辉霞\', born:1990, interest:\'管理,旅游\', goodat:\'管理,采购\'})
CREATE (p9:Person {name:\'黄廷鹏\', born:1992, interest:\'OA\', goodat:\'java\'})
CREATE (p10:Person {name:\'史乐乐\', born:1991, interest:\'OA,旅游\', goodat:\'管理\'})
CREATE (p1)-[:认识]->(p2)
CREATE (p1)-[:认识]->(p3)
CREATE (p1)-[:认识]->(p4)
CREATE (p1)-[:认识]->(p5)
CREATE (p1)-[:认识]->(p9)
CREATE (p2)-[:认识]->(p1)
CREATE (p2)-[:认识]->(p3)
CREATE (p2)-[:认识]->(p4)
CREATE (p2)-[:认识]->(p5)
CREATE (p2)-[:认识]->(p9)
CREATE (p3)-[:认识]->(p1)
CREATE (p3)-[:认识]->(p2)
CREATE (p3)-[:认识]->(p4)
CREATE (p3)-[:认识]->(p5)
CREATE (p3)-[:认识]->(p9)
CREATE (p4)-[:认识]->(p1)
CREATE (p4)-[:认识]->(p2)
CREATE (p4)-[:认识]->(p3)
CREATE (p4)-[:认识]->(p5)
CREATE (p4)-[:认识]->(p9)
CREATE (p5)-[:认识]->(p1)
CREATE (p5)-[:认识]->(p2)
CREATE (p5)-[:认识]->(p3)
CREATE (p5)-[:认识]->(p4)
CREATE (p5)-[:认识]->(p6)
CREATE (p5)-[:认识]->(p8)
CREATE (p5)-[:管理]->(p1)
CREATE (p5)-[:管理]->(p2)
CREATE (p5)-[:管理]->(p3)
CREATE (p5)-[:管理]->(p4)
CREATE (p5)-[:管理]->(p6)
CREATE (p6)-[:认识]->(p5)
CREATE (p6)-[:认识]->(p4)
CREATE (p6)-[:夫妻]->(p8)
CREATE (p9)-[:认识]->(p1)
CREATE (p9)-[:认识]->(p2)
CREATE (p9)-[:认识]->(p3)
CREATE (p9)-[:认识]->(p10)
CREATE (p9)-[:单相思]->(p10)
CREATE (p10)-[:认识]->(p9)
运行完上面脚本的效果
查找所有擅长goodat“管理”的人
MATCH (n:Person ) WHERE n.goodat =~ \'.*管理.*\' return n;
查找成文龙“认识“的人
MATCH (n:Person { name: \'成文龙\' })-[:认识]-(neighbors) RETURN n,neighbors
查找所有“单相思”的人
MATCH (n:Person)-[:单相思]-(neighbors) RETURN n,neighbors
查找周开琪“管理”的人
MATCH (n:Person { name: \'周开琪\' })-[:管理]-(neighbors) RETURN n,neighbors
查找徐辉霞“认识“的人 (2层关系网络)
MATCH (n:Person { name: \'徐辉霞\' })-[:认识*1..2]-(neighbors) RETURN n, collect(DISTINCT neighbors)
查找徐辉霞“认识“的人 (3层关系网络)
MATCH (n:Person { name: \'徐辉霞\' })-[:认识*1..3]-(neighbors) RETURN n, collect(DISTINCT neighbors)
徐锦亮找到史乐乐的所有最短路径 (不超过4层)
MATCH p=allShortestPaths(
(a:Person { name: \'徐锦亮\' })-[:认识*..4]-(b:Person { name: \'史乐乐\'})
)
RETURN p
删除所有节点和关系
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
请发表评论