Neo4j图数据库学习手册

为什么需要图数据库?

     现在,业务需求的频繁变动和数据之间的复杂联系都需要数据库有很强的适应力。对于传统关系型数据库,对于复杂的数据关系并不能很好的展现。比如社交网站的用户关系,错综复杂就像一张网 。对于这种数据,图数据库就能很好以图结构来存储。

联系才是数据本质的存在

聊聊neo4j的CQL操作

CQL

CQL是neo4j的图形查询语言。【Cyther(友情提示:赛粉儿) Query Language】

图数据库有什么?

最简单的回答:点和边啊!
正经一点回答:点代表一个节点信息,边代表节点信息之间的关系。点和边都可以具有属性,以键值对的形式。

创建节点

语法结构:create (<node-name>:<label-name>)
节点名称、标签名称。

create (p:phone)          //创建了一个没有属性的节点,这个节点是个phone,具体是什么phone看使用者是如何定义了
create (p:phone{type:"phone",phoneNumber:"181XXXX3333"})  //创建了一个有属性的节点,想必这种形式大家不陌生。对,就是你们想的那样。并且,type也只是属性之一,并不是必须的。

按照以上格式,我们可以创建多个。如果想要在创建的时候看到创建结果可以在后面追加
return p;
create (p:phone)  return p;

eg2:
create (b:bag{color:"red"}),(b2:bag{color:"green"})
创建关系

关系是节点与节点之间的关联。
关系分为单向和双向。创建关系时请带上箭头>或者<。
语法:
match:匹配
where:在某某条件前提下
return:返回一个而结果,返回什么由后面内容决定
在明确这些前提之后。我们可以这样:

  1. 已有节点之间创建无属性的关系
eg1:
match (p1:phone{phone:"18145626687"}),(p2:phone{phone:"13415556888"}) 
create (p1)-[r:call]->(p2)
return r;

eg2:
match (b1:bag{color:"red"}),(b2:bag{color:"green"}) create (b1)-[r:mixWith]->(b2) return r;

根据上列CQL,相信大家还是能读懂字面意思。就是我要match俩phone节点,他们分别是具有某某电话的属性。然后我create一个链路,从p1到p2,中间中括号是r:call,还有个方向键。

即创建一个关系,这个关系是从a到b的,然后关系的名字是call。
其中p1和p2就像是对象一样,随便叫什么。

同理,我们还可以有另一种写法,把where用上

match (p1:phone),(p2:phone) 
where p1.phone="18145626687" and p2.phone="13415556888"
create (p1)-[r:call]->(p2)
return r;
//创建关系
  1. 已有节点之间创建有属性的关系
match (p1:phone),(p2:phone) 
where p1.phone="18145626687" and p2.phone="13415556888"
create (p1)<-[r:call{sumTime:"30.22",counts:"3"}]-(p2)
return r;//可要可以不要这一句,只是看看返回结果
  1. 没有节点,直接创建节点和关系
create (h1:hero{name:"ez",age:"18"})-[r:loves{loveTime:"10"}]->(h2:hero{name:"lux",age:"16"})
查询

语法:match 匹配 + return 返回
单独使用match是会报错的,因为只是匹配没有返回
where 用于筛选条件
with 在return之前进行特殊处理,值得注意的一点是如果return返回某个值,这个值要在with中申明。

//普通查找节点
match (pn:hero) where pn.name="ez" return pn;
match res=(pn:hero) where pn.name="ez" return res;
match (pn:hero{name:"ez"}) return pn; 

//排序查找节点
match res=(p1:hero) return res order by p1.age desc;

//普通查找关系
match res = (p1:hero{name:"ez"})-[r:loves]->(p2:hero) return res; //返回ez爱上了谁,
match res = (p1:hero{name:"ez"})<-[r:loves]-(p2:hero) return res; //返回谁爱ez,
match res = (p1:hero{name:"ez"})-[r:loves]-(p2:hero) return res; //返回谁和ez相爱了,
match res = (p1:hero{name:"ez"})-[r:loves]-() return res; //返回ez喜欢的任何东西,除了人还有其他的,

聚合查找
with 在where后对搜索结果进行二次处理时需要用到
distinct 去重,可以对节点去重也可以对节点的属性去重
as 重命名(和sql一样)
count(*)计数
sum(属性值的累加) avg、min、max
没有group by。

这里随便写一个
match res=(p1:hero{name:"ez"})-[r:loves]->(p2:hero) with distinct p2.name as lover return p1,lover; //返回ez和ez爱上的人,并且出现同名的则只要显示一个名字就可以了
删除节点、关系

delete 删除节点或者关系,删除节点时,如果存在关系则删不掉

match (p:hero{name:"lux"}) delete p;

Neo.ClientError.Schema.ConstraintValidationFailed: Cannot delete node<106743711>, because it still has relationships. To delete this node, you must first delete its relationships.

match (p1:hero{name:"ez"})-[r:loves]->(p2:hero{name:"lux"}) delete r,p2; //删除关系r和节点p2。ez不爱拉克丝了。

待续。。。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容