Neo4j入门点滴(二):模式与模式匹配-五岳之巅

  Announcement: All data comes from the book “Building Web Applications with Python and Neo4j“, just for study & not for 商。

 模式及模式匹配(Pattern and Pattern matching这是口令的果心,特性描述我们家怀有某种意图或目的找到什么、找到或替换材料的计算。不逮捕模式和模式匹配,你不克不及写独身无效的查询。

一、材料预备
 率先,输出以下命令以清空现时时的材料库:

  1. match (n)-[r]-(n1) delete n,r,n1;
  2. match (n) delete n

  第独身命令拟出承认互相连络的压紧及其衔接。,另外的句拟出承认孤独压紧。。
 与,产品一包男人和女性:

  1. CREATE (布拉德利:男:教练机 {姓名:布拉德利, 姓:绿色,年纪:24岁, 资历:我们家
    CREATE (马修:男:先生 {名字:马太真理》, 姓:库珀,年纪:36岁, 资历:我们家
    CREATE (丽莎:女性 {名字:丽萨, 姓:亚当斯, 年纪:15岁,资历:‘加拿大人的’}
    CREATE (抽水马桶:男子汉 {姓名:抽水马桶, 姓:古德曼, 年纪:24岁,资历:墨西哥市
    CREATE (安妮:女性 {名字:安妮, 姓:贝尔, 年纪:25岁,资历:‘加拿大人的’}
    CREATE 里普利:男子汉 {名字:里普利》, 姓:安尼斯顿,资历:我们家

  此时有压紧但心不在焉衔接。,树或花草结果如次图:
与我输出上面的勾住结算单,总报错。然而独身接独身进入是心不在焉成绩的。:

  1. MATCH (布拉德利:男{姓名:布拉德利)},(马修:男子汉{姓名:马修}) bradley, matthew CREATE (布拉德利)- [ [助手] > >(马太) , (布拉德利)- [ [教授] > >(马太)
  2. MATCH (布拉德利:男{姓名:布拉德利)},(马修:男子汉{姓名:马修}) bradley,matthew CREATE (马修)- [ [助手] > >(布拉德利)
  3. MATCH (布拉德利:男{姓名:布拉德利)},(丽莎:女性{name:”Lisa”})WITH bradley,lisa CREATE (布拉德利)- [ [助手] > >(丽莎)
  4. MATCH (丽莎:女性{name:”Lisa”}),(抽水马桶:男子汉{name:”John”})WITH lisa,john CREATE (丽莎)- [ [助手] > >(抽水马桶)
  5. MATCH (安妮:女性{name:”Annie”}),里普利:男子汉{name:”Ripley”})WITH annie,ripley CREATE (安妮)- [助手:>(里普利)
  6. MATCH 里普利:男子汉{name:”Ripley”}),(丽莎:女性{name:”Lisa”})WITH ripley,lisa CREATE (里普利)- [ [助手] > >(丽莎)

  现时您可以关照根本材料集的里面。:

(2)WHERE款项说话中肯应用模式
  为一套,假定它是独身空集中,因不过假的,非空整齐的表现真。可以应用In关键词深一层的限度局限:

  1. match (x)
  2. where x.name in [抽水马桶], 安得烈 and is not NULL
  3. return x

  自然,也可以应用非主力队员有代理人举行滤除。:

  1. match (x)
  2. where x.name =~ “J.*”
  3. return x

  在这种情况下,过错= ~”xxx”,不过 =~ “xxx”,即这是独身评分,不要写相反的的东西。
好了,当今的若干书。灵巧
[1] 应用别号:

  1. with 落后于时代 as haha
  2. match (x)
  3. where 托尔沃(哈哈) < 30
  4. return x

  在意,NeN4J说话中肯属性名是大小写敏感的,假定写,体系将注意事项并且不具有此属性。:

然而,“.”否一般“[]”,像,上面的排是相反的的:

为什么?我竟找到了,并非“.”不一般“[]”,但二者都是完整公正地的,但用法精巧。在附近[]就,同时,它必然的是常数。,因而当我把X [年纪]写为X [年纪],这是一平稳地的通行。,并归还相等的量的树或花草结果:


[2] 应用在()用于属性受试验的应变量

  1. match (x)
  2. where exists()
  3. return x.name

  先前应用过,但现时它被移以及

  [3] 特点匹配:
这相对是凶器。,应用启动 with、ends with或contains,匹配特点串从什么模式开端?,什么模式完毕或它克制什么?。完全舒适的!比方:

  1. match (x)
  2. where x.name starts with “B”
  3. return x.name

  或许:

  1. match (x)
  2. where x.name contains “a”
  3. return x.name

(3)休息条目
  [1] 排序排序(默许为升序),支持者混合行)
  [2] 限度局限付还数的限度局限,穹窿表现鄙夷最火线。限制与加啤酒花于的助手,可以取心爱的值:

  1. match (x)
  2. return x
  3. order by skip 3 limit 2

  生利过错第独身3。,只需四个和第五。它真的很思路敏捷的!

(4)附条目
  同样独身完全可得到的东西的条目,引入前,你必要先背诵,”。像,在上面的结算单中,逗号是并置的。,树或花草结果归还了X和Y两个体的通讯。,在归还结算单中包含x,Y中间的逗号同样因此用法的用法。。

  1. match (x{name:”John”}),(y{名字:安妮})
  2. return x,y

  好的,持续,在附近以下初始制约:

手段上面的结算单会发作什么树或花草结果?

  1. match (x{名字:丽萨})<--(y)--()
  2. return 伯爵(Y)

  据我看来葡萄汁是2,但我错了,树或花草争吵4。如次图:

为什么这平均数计算这两个直接吃或喝?,本身再试试,这次应用双向尝试。树或花草争吵大幅空投。,它依然是4:

  1. match (x{名字:丽萨})–(y)–()
  2. return 伯爵(Y)

  应用布降临利的树或花草争吵8。,取向的应用是3。。我重行反省了承认提前设置的衔接。,不葡萄汁是3。是BUG吗?(你必要尝试另独身版本)
OK,话说返回,让逗号出现时,书说话中肯情况如次:

  1. match (x{姓名:布拉德利})–(y)–>()
  2. with y, count(*) AS cnt
  3. where cnt > 1
  4. return y

  归还值是马修,没成绩。。由于承认适合模式的记载,不料马修有两个里面的的吃或喝。成绩来了,必然的写 你能被限度局限吗?假定我拟出Y?

  1. match (x{姓名:布拉德利})–(y)–>()
  2. with count(*) AS cnt
  3. where cnt > 1
  4. return cnt

  CNT的值变为3,好的,我添加y,看一眼CNT财产:

  1. match (x{姓名:布拉德利})–(y)–>()
  2. with y, count(*) AS cnt
  3. where cnt > 1
  4. return cnt

  这时,CNT的付还率为2。。上述的尝试满足说明了 y, 在XXX典型中,逗号前Y乘客名额有限制的的功能,假定心不在焉添加Y,这么:

  1. match (x{姓名:布拉德利})–(y)–>()
  2. return count(*)

  记载的量是3,指代布拉德利命说话中肯3个衔接和压紧。,假定推断恰当地,与添加独身Z来表现目的压紧,因而计数(z)葡萄汁是2:

  1. match (x{姓名:布拉德利})–(y)–>(z)
  2. return 计数(z)

  树或花草争吵3,然而假定我做加法distinct,与秋天2:

  1. match (x{姓名:布拉德利})–(y)–>(z)
  2. return 计数(分别) z)

  通情达理的了,有些西方是反复的。,现时再尝试稍许地不成散去的情况。:


即,对衔接的树或花草结果做加法两样的树或花草争吵恰当地的。,心不在焉成绩,不加4和2。无取向的接触人关照了幽灵:

更出人意料的的是,树或花草结果心不在焉归还到抽水马桶:

哎呀!,神啊。我竟确信发作了是什么。,都是我的错!出人意料的的是我不太听说它。。
不寒而栗地详述,我一向把(x)-(y)-()显得不错一组衔接。,实际上,这是相反的的。,由于衔接过错()表现,它表达于。看一眼,不管取向不动的取向,这更不用说。:

  好吧,现时的首要看法是(-)-(-)-()三个插入成分。。让我先试试看吧,如:

  很明亮的,树或花草争吵相反的的。即,匹配 (x{名字:丽萨})-(y)-(z),这种排方法是相反的的。。自然,方法它-心不在焉语法相反的:match (x{名字:丽萨})–(y)–(z) return count(*),然而树或花草争吵4。现时我通情达理的,由于(a)-(b)-(c)表现压紧中间的衔接。,即,偶然碰见A是丽莎。,B和A衔接,并且C还衔接到B。说百姓话,是A要点,发展2层。假定我逮捕恰当地的话,这么

match (x{名字:丽萨})–(y)–(z) return z,树或花草结果葡萄汁是最里面的两个压紧。。并且match (x{名字:丽萨})–(y) return count(*),3个葡萄汁直接衔接到丽莎的压紧。试试,测验一下:

  庆祝本身,还是它有很多打扰,但终极不动的结尾了!反过来说,你可以像同样玩:[a]-(b)-[c],我心不在焉试过。,但我信任更不用说。CyfER真的很思路敏捷的!

 接来下,应用与 X上涨资历,举行找到。但我碰见这设想与 x,都是公正地的,三开:


(5)union和union 承认条目
  助手应用与SQL相等的量,用于衔接两个匹配,从归还树或花草结果中拟出反复记载。。但助手 承认应变量都是相等的量的,但不反复反复记载。

  1. match (X:男子汉)- [助手] return x.name, 帐单(X)
  2. union
  3. match (X:女)- [助手] return x.name, 帐单(X)

  帐单()归还承认帐单,小半付还,如次图所示:

然而,要在意:心不在焉帐单()应变量归还帐单。

因此视频博客更长,竟完毕了。。下独身第三将被翻开。

                                              五山之巅
                                  2017年5月23日(孟菲斯工夫)
                                                  20:37
                                            多西住所名称上个草案

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注