neo4j图形数据库学习:
前期准备:
jdk1.8以上版本(neo4j依赖于java)
neo4j数据库(社区版)下载,安装
先给出一张样例图:
neo4j图形数据库,初学者要了解两个关键元素:节点和关系。节点就如上图画的那样,是一个个圆点内容,关系呢,是上图中的箭头指向,即两个节点的桥梁叫关系。
上图是python体系的几个岗位关键或基础知识总结,我选取其中的爬虫知识来进行neo4j数据库的增删改查练习。
我的是Windows10 环境,现在命令行启动neo4j数据库:neo4j console
然后打开浏览器,输入localhost:7474/
首先我们要学的个小技巧,假如你英文没学好,看着英文就头疼咋办?
那你就用谷歌浏览器打开上面那个界面,谷歌浏览器地址栏有【翻译此页】,即可把英文界面翻译成中文。(仅限查看内容,执行命令的时候,还是要用英文界面,不然执行的命令会也会被翻译为中文,无法执行Cypher语句)
练习的个命令:
:help Cypher
Cypher的帮助文档,它罗列出了Cypher常用的关键字
增
现在我们新增一个name="爬虫",属性是岗位的节点:
create (:Jobs {name:"爬虫"})
和其他数据库一样用关键字create 创建节点;小括号包裹创建节点的内容;冒号左边是变量名,右边是节点属性;节点内容键值对方式包裹在大括号里。
一次性创建多个节点属性都是知识的节点(CSS,Linux,HTML)
create(:Knowledge {name:"HTML"}),(:Knowledge {name:"CSS"}),(:Knowledge {name:"Linux"})
多节点创建和单节点创建基本无差别,以逗号隔开即可同时创建
节点创建了,下面我们来创建关系
爬虫需要HTML、CSS和Linux的知识(即爬虫这个节点要指向HTML和Linux的节点)
match(a:Jobs{name:"爬虫"}),(b:Knowledge) create(a)-[:need]->(b) return a,b
match 和 return是查询的关键字,查询内容和create内容一样格式,创建关系还是用create,但格式是:create (节点A) -[:关系属性]->(节点B) 或者先查询AB节点,再进行关联关系match(a:节点A),(b:节点B) create (a) -[:关系属性]->(b) return a,b (注:查询结果必须return)
那我们能不能直接创建一个关系关联一个新建的节点呢?
爬虫节点需要Python的知识(Python的知识节点还没开始创建)
match(a:Jobs{name:"爬虫"}) create(a)-[:need]->(b:Knowledge{name:"Python"}) return a,b
这里先创建了Python的节点再与爬虫节点关联
上面创建节点和关系,顺带讲了一点查询的语句。
查
查询节点:
查询爬虫这个节点:
match(a:Jobs{name:"爬虫"}) return a
查询属性为Jobs的所有节点:
match(a:Jobs) return a
这里不写属性的详细信息,就是查找该属性下的所有内容。
还有一种为大数据量准备的查询,只显示部分数据的
只显示前25条数据:
match(n:Jobs) return n limit 25
加了个limit条数限制
查询HTML和CSS的节点内容:
match(a:Knowledge{name:"HTML"}) ,(b:Knowledge{name:"CSS"}) return a,b
或者还有一种写法:
match(a:Knowledge) where a.name="HTML" or a.name="CSS" return a
查询关系呢
match(a:Jobs)-[]-(b:Knowledge) return a,b
查询Jobs和Knowledge属性节点的所有关系
match(a:Jobs)-[]->(b:Knowledge) return a,b
查询Jobs和Knowledge属性节点的由Jobs指向Knowledge的所有关系
match(a:Jobs)-[:need]->(b:Knowledge) return a,b
关系属性为need,查询Jobs和Knowledge属性节点的由Jobs指向Knowledge的所有关系
改
增加或修改属性内容:
新建一个Jobs节点无属性内容:
create (:Jobs)
将无属性内容的节点添加name属性:
match(d:Jobs) where id(d)=23 set d.name="大数据" return d
用关键字set 进行属性设置
查询的时候这里我碰到个问题,如何用id去查找(因为Jobs之前有个爬虫名字的),后来百度了一下,用where id(变量名)=23查找数据。
删
删除分节点删除和属性删除:
新建一个Dog属性:
create(:Dog{name:"狗"})
删除它的名字:
match (d:Dog) remove d.name return d
这里用remove进行属性删除
删除整个节点:
无关系型节点:
match (d:Dog) delete d
有关系型节点:
删除CSS属性节点:
match(d:Knowledge{name:"CSS"})-[e:need]-(f:Jobs) delete d,e
先查找关联关系,删除节点的同时,也删除关系。这里可以类推,删除一个关系,只要上面的语句delete后面把d去掉,即删除关系
简单的聚合计算:
计算Knowledge属性节点有多少个:
match(d:Knowledge) with count(d) as c return c
查找所有Knowledge属性节点,用关键字with + count 求和,再将求和的值赋值给临时变量c