Neo4j-Cypher语言

详细一点的介绍,就看这两个好的的博客图数据库之Cypher语言图数据库-Neo4j介绍与Cypher入门

Neo4J3.0官方使用手册请点击Neo4J3.0官方使用手册

Neo4J3.0官方开发手册请点击Neo4J3.0官方开发手册

Cypher-Neo4J3.0使用手册请点击Cypher-Neo4J3.0使用手册

学习资源都在上面,下面进入正题

前面一直没搞清楚什么是图数据库,我一直以为是存储图片的数据库【哭死。。。。。】后来才知道,这个图不是图片,是一种数据结构,图。。。只怪自己上课不曾好好听讲。。。

**

Talk is cheap,Show you the code!

**
在图数据库中,节点就类似于我们的一般数据库的表(可能这个说法是错误的。。。这是我自己认为的),因为,我还没发现Neo4J 里面有表的概念,或者类似的概念存在,就是说,如果数据量大了以后,管理人员一定要记住,某个节点的属性,或者关系属性,不然找一个节点,无比麻烦。。。看的眼花缭乱,或许是应为刚学,不会使用Cypher吧,show一把Neo4j里面的select * 就是 match (n) return n;
如果用官方的可视化插件,是长这样的:
这里只有三百多个节点
如果是从终端里面看,大概是这样的
这里写图片描述
以上的还是只有三百多个节点,如果成千上万条。甚至几十万条,简直爆炸,难以想象,眼花缭乱

好吧,先声明一点哈,俺是一个学生,见识少,有些理论只是个人的一孔之见,望各位大大海涵,指正哈
废话少说,让我们开启Neo4j的HelloWorld!

一、创建节点
我要创建四个人,张三。李四、王五、赵六

create(Lisi:Person{name:'Lisi',born:1996,sex:'男',school:'四江'}),(Wangwu:Person{name:'Wangwu',born:1995,sex:'男',school:'三江'}),
(Zhangsan:Person{name:'Zhangsan',born:1995,sex:'男',school:'三江'}),(Zhaoliu:Person{name:'Zhaoliu',born:1997,sex:'男',school:'四江'})
 return Lisi,Zhangsan,Zhaoliu,Wangwu

这是官方的create语句:

这里写图片描述

解释一下哈:

create (n:Person{name:'aaa',age:1,....})
这是创建一个节点
n:是这个语句中暂时用的节点名字,可以随意取,只在这句话中生效!只有一次哈,Neo4j里面的名字,真的就像临时代号一样,过期作废。具有时效性。
Person:这是节点的标签,我感觉就像一个节点的名字,这个是永久生效的,这也是在茫茫节点中找一个节点的主要依据,不过标签也可以有多个
{name:'aaa',age:1,....}:{}里面存放的是节点的属性,这就是用来区分每一个节点,就像,就像有两个人,甲叫张三,乙也叫张三,我怎么知道我要找的是甲还是乙呢?后来我再说是升高一米七,体重一百七的,等等特征,来区分分甲乙,一个节点的属性可以有多个

有了节点,就要有节点之间的关系了。
二、创建节点之间的关系:
有个四个人,我就要编排他们的关系了,哈哈哈

match (a:Person{name:'Lisi'}),
(b:Person{name:'Zhangsan'}),
(c:Person{name:'Zhaoliu'}),
(d:Person{name:'Wangwu'}) 
merge (a)-[r:friend]->(b)-[t:lover]->(c)
merge (a)-[y:friend]->(d) return r,t,y

四个人,我说张三和李四是朋友,张三和赵六是恋人,李四和王五是朋友

match :我感觉match就是sql里面的select ...  where ... 的集合体,官方称之为模式匹配
merge: 也是创建,和create类似,不同的是,merge创建时,要先查询,该节点。关系,是否存在,若存在就返回该节点。关系,如果没有就创建新的。这就避免了创建重复的节点、关系(如果是增加关系,我建议使用merge而不是create)

下方是官方的match和merge例子:
这里写图片描述

3、补充关系
这四个人有一个属性,叫做学校,那我给他们创建一个叫做校友的关系

match (a:Person),(b:Person) where a.school=b.school (a)-[r:alumnus]->(b) return r
Cypher支持where ,等其他SQL中的东西,具体的可以看博客最上面推荐的两篇博客

这时,我发现,自己和自己是校友,是个什么鬼?!
这里写图片描述
三、删除关系
好吧,是时候删除这该死,愚蠢,荒诞的关系了

match (a)- [r:alumnus]->(b) delete  r

看来必须申明节点a,b不是同一个节点了

match (a:Person),(b:Person) where a.school=b.school and a.name<>b.name merge (a)-[r:alumnus]->(b) return r
<>:我发现貌似Cypher貌似不支持!=,所以只能用<>

四、修改节点属性
我突然发现赵六和张三这对恋人都是男的。。。。。是时候让赵六做变性手术去了

match (a:Person) where a.name='Zhaoliu' set a.sex='女' return a

好了看看最终成果吧
这里写图片描述
这里还有很多不足的,比如说,恋人朋友,应该是两个认得事,怎么能只有一个箭头呢。。。。Neo4J貌似不支持双向箭头。。。。我也没研究到。。。

这只是Neo4J的简单应用,哈哈哈哈,具体的,详细的请看最上面推荐的博客,资料。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值