参考:
https://www.cnblogs.com/alltoforever/p/12678474.html
https://zhuanlan.zhihu.com/p/88745411?utm_source=wechat_session
在日常工作中,关系数据库mysql、Oracle等可以解决大部分问题。但对于某些特殊的场合,他们却无能为力。
比如对于一些我们并不关注对象的属性,而是更关注他们之间的关系的时候。关系型数据库就变得无能无力了。
在我经历的一些项目中,用到了非常多的数据表,他们之间有复杂的关系,经过多层的筛选、处理、聚合才得到最终的结果表。
当有时候你发现一张结果表可能有问题时,你可能会考虑它是从哪里来的,错误的源头在哪里。
然而,你发现并没有一个很好的工具能够快速得到你想要的结果。
这种情况下,也许你可以考虑一下图数据库——Neo4j
Neo4j是一款成熟的图数据库产品。他提供了免费的社区版供大家学习。
有兴趣的东西可以去这个地址下载。
一、基本概念
label:标签,对应面向对象编程里的类class
node:节点,是label的实例,也就是对象,node后面的大括号里放置节点的属性
relationship:关系,是节点与节点之间的关系,可以自定义
二、基本操作
#创建节点 CREATE (a:Table {name:'ods_ebp_data_service'}) RETURN a create(p:PERSON {name:"Mask",age:30,heigh:180,weight:80})-[r:SON_OF]->(f:PERSON {name:"OLD_Mask",age:55,heigh:160,weight:60}) return p,r,f #查询单个节点 MATCH (a:Table {name:'ebp_data_service'}) RETURN a MATCH (a:Table) WHERE a.name STARTS WITH 'ads' RETURN a MATCH (a:Movie) WHERE a.released > 1990 AND a.released < 2000 RETURN a #查询节点和关系 MATCH (a:Table {name:'ebp_data_service'})-[:IMPORT_FROM]->(m:Table) RETURN a,m MATCH (a:Table {name:'ads_ebp_data_service'})<-[:EXPORT_TO]-(m:Table) RETURN a,m MATCH (a:Person {name:'Tom Hanks'})-[:ACTED_IN]->(m:Movie) RETURN a,m MATCH (m:Movie {title:'Cloud Atlas'})<-[:DIRECTED]-(d:Person) RETURN d #查询节点及所有关系节点 MATCH (a:Table)-[relatedTo]-(b:Table ) RETURN a.name, type(relatedTo), b.name #查询关系 match ()-[r:IMPORT——FROM]-() return startnode(r).name as s, endnode(r).name as e ,type(r) as rtype match (a:Table {name:"dwd_ebp_data_service"})-[r]-(b) return a,r,b #设置关系1 MATCH (a:Table {name:'ebp_data_service'}), (b:Table {name:'ods_ebp_data_service'}) MERGE (a)-[r:IMPORT_FROM]->(b) RETURN a,r,b #设置关系2 MATCH (a:Person {name:'Brie Larson'}), (b:Movie {title:'Captain Marvel'}) MERGE (a)-[r:ACTED_IN]->(b) SET r.roles = ['Carol Danvers'] RETURN a,r,b #设置关系 MATCH (a:Person {name:'Liz'}), (b:Person {name:'Mike'}) MERGE (a)-[:FRIENDS]->(b) MATCH (a:Person {name:'Shawn'}), (b:Person {name:'Sally'}) MERGE (a)-[:FRIENDS {since:2001}]->(b) #修改节点,给节点添加或修改属性 MERGE (a:Table {name:'ebp_data_service'}) ON MATCH SET a.id= 109 RETURN a MERGE (a:Table {name:'ebp_data_service'}) ON MATCH SET a.name= 'dwd_ebp_data_service' RETURN a #删除节点 MATCH (a:Person {name:'Brie Larson'}) DETACH DELETE a #删除节点及关系 match (p:Person {name:"lisi"})-[r]-() delete p,r #聚合函数 match(p:Person) return p.name as name,p.age as age,count(p) as count,max(p.age) as maxAge,min(p.age) as minAge,avg(p.age) as avgAge,sum(p.age) as sumAge
三、界面展示
下面我查询了表a以及所有跟a有关系的表b,同时展示他们之间的关系,是不是很强大!