首页 > 其他分享 >Neo4j之Cypher语法(2)

Neo4j之Cypher语法(2)

时间:2022-09-19 17:12:09浏览次数:78  
标签:关系 Cypher name 语法 Person Neo4j 节点 match 属性

Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,由于Neo4j在图形数据库家族中处于绝对领先的地位,拥有众多的用户基数,使得Cypher成为图形查询语言的事实上的标准。

1. 创建节点

节点模式的构成:(Variable:Lable1:Lable2{Key1:Value1,Key2,Value2}),实际上,每个节点都有一个整数ID,在创建新的节点时,Neo4j自动为节点设置ID值,在整个数据库中,节点的ID值是递增的和唯一的。

下面的Cypher查询创建一个节点,标签是Person,具有两个属性name和born,通过RETURN子句,返回新建的节点:

create (n:Person { name: 'Tom Hanks', born: 1956 }) return n;

 

 

2. 查询节点

通过match子句查询数据库,match子句用于指定搜索的模式(Pattern),where子句为match模式增加谓词(Predicate),用于对Pattern进行约束;

2.1 查询整个图形数据库

match(n) return n;

2.2 查询born属性小于1955的节点

match(n) 
where n.born<1955 
return n;

2.3 查询具有指定Lable的节点

match(n:Movie) 
return n;

2.4 查询具有指定属性的节点

match(n{name:'Tom Hanks'}) 
return n;

3. 创建关系

关系的构成:StartNode - [Variable:RelationshipType{Key1:Value1,Key2:Value2}] -> EndNode,在创建关系时,必须指定关系类型。

3.1 创建没有任何属性的关系

MATCH (a:Person),(b:Movie)
WHERE a.name = 'Robert Zemeckis' AND b.title = 'Forrest Gump'
CREATE (a)-[r:DIRECTED]->(b)
RETURN r;

 3.2 创建关系,并设置关系的属性

MATCH (a:Person),(b:Movie)
WHERE a.name = 'Tom Hanks' AND b.title = 'Forrest Gump'
CREATE (a)-[r:ACTED_IN { roles:['Forrest'] }]->(b)
RETURN r;

 

 

 4. 查询关系

在Cypher中,关系分为三种:符号“--”,表示有关系,忽略关系的类型和方向;符号“-->”和“<--”,表示有方向的关系;

4.1 查询整个数据库

 

 

 4.2 查询跟指定节点有关系的节点

示例脚本返回跟Movie标签有关系的所有节点

match(n)--(m:Movie) 
return n;

 

 

 4.3 查询有向关系的节点

MATCH (:Person { name: 'Tom Hanks' })-->(movie)
RETURN movie;

 

 

 4.4 为关系命名

通过[r]为关系定义一个变量名,通过函数type获取关系的类型
MATCH (:Person { name: 'Tom Hanks' })-[r]->(movie)
RETURN r,type(r);

 

 

 4.5 查询特定的关系类型

通过[Variable:RelationshipType{Key:Value}]指定关系的类型和属性

MATCH (:Person { name: 'Tom Hanks' })-[r:ACTED_IN{roles:'Forrest'}]->(movie)
RETURN r,type(r);

5. 更新图形

set子句,用于对更新节点的标签和实体的属性;remove子句用于移除实体的属性和节点的标签;

5.1 创建一个完整的Path

由于Path是由节点和关系构成的,当路径中的关系或节点不存在时,Neo4j会自动创建;

CREATE p =(vic:Worker:Person{ name:'vic',title:"Developer" })-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael:Worker:Person { name: 'Michael',title:"Manager" })
RETURN p

变量neo代表的节点没有任何属性,但是,其有一个ID值,通过ID值为该节点设置属性和标签

 

 

5.2 为节点增加属性

通过节点的ID获取节点,Neo4j推荐通过where子句和ID函数来实现。

match (n)
where id(n)=7
set n.name = 'neo'
return n;

 

 

 5.3 为节点增加标签

match (n)
where id(n)=7
set n:Company
return n;

5.4 为关系增加属性

match (n)<-[r]-(m)
where id(n)=7 and id(m)=8
set r.team='Azure'
return n;

6. 删除操作

6.1 清空数据库(慎用)

对于节点比较少的可以使用:

match (n) detach delete n

对于节点比较多的:

1、停掉服务; 2、删除 graph.db 目录; 3、重启服务。

6.2 删除节点和关系

首先不删除干净连接的节点和关系是不能删除一个节点的,会报执行错

一种方式,就是删除一个节点,连带着它的关系全部删除,刚刚上面这种执行错误的,加一个detach关键字即可解决。

match(p:Person{name: 'jt'}) detach delete p  # 使用关键字detach

还有一种情况,只想删除关系,可以运行命令:

match(p:Person{name: "reba"})-[r:WORK_AT]->() delete r  # 可以删除reba节点的关系WORK_AT

6.3  删除节点和关系中的属性

下面这段代码利用remove关键字直接进行删除属性,删除后的属性为null

# 使用remove字段,发现返回的参数d.code为null
match(d:Disease{name:"诊断"})
remove d.code     
return d.name, d.oid, d.code

除了删除属性,我们还能删除label,什么是label呢?其实就是类名,运行下面命令:

# 比如用下面这段话,把“诊断”的类都删掉,节点也删掉
match(d:Disease{name:"诊断"})
remove d:Disease
return d.name, d.oid, d.code

7 跟实体相关的函数

跟实体相关的函数,主要是获取节点或关系的ID,关系类型,标签和属性等函数。

7.1 通过id函数,返回节点或关系的ID

MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie)
RETURN id(r);

7.2 通过type函数,查询关系的类型

MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie)
RETURN type(r);

7.3 通过lables函数,查询节点的标签

MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie)
RETURN lables(movie);

7.4 通过keys函数,查看节点或关系的属性键

MATCH (a)
WHERE a.name = 'Alice'
RETURN keys(a)

7.5 通过properties()函数,查看节点或关系的属性

CREATE (p:Person { name: 'Stefan', city: 'Berlin' })
RETURN properties(p)

 

match (n)
where id(n)=7
set n.name = 'neo'
return n;

标签:关系,Cypher,name,语法,Person,Neo4j,节点,match,属性
From: https://www.cnblogs.com/yanglei2022/p/16708307.html

相关文章

  • 基本语法
    JavaScript语法:JavaScript是一个程序语言。语法规则定义了语言结构。JavaScript是一个脚本语言。它是一个轻量级,但功能强大的编程语言。JavaScript可以通过不同的方......
  • GFM语法个人简介示例
    个人简介基本信息姓名:曾强年龄:20岁职业:攻城狮爱好:看电影、听音乐、喝咖啡抽烟、喝酒、烫头(头发没了)人生格言:机会总是留给有准备的人。时时居先,方可快......
  • 2021年3月-第03阶段-前端基础-JavaScript基础语法-JavaScript基础第01天
    1-编程语言1.1编程编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。计算机程序:就是计算机所执行的一系列的指令集合,而......
  • Delphi 新语法:匿名函数
    这里的新语法一般指Delphi7不支持的语法.对于比较简单实现,不需要复用,开发者更喜欢在使用时,原地声明,而没有必要单独声明并实现这个方法.通过关键字reference来定义一个匿......
  • JS: 模拟async/await语法糖
    不熟悉生成器对象的小伙伴,可查看:Generator、Generator.prototype.next模拟函数:/***模拟async关键字的函数*(不返回Promise对象也是可以的)*@paramgenerator*......
  • Python简洁语法笔记
    defaultdict需要构造类似{k1:{v11,v12,v13,...},k2:{v21,v22,v23,...},...}结构的数据时,可以用collections.defaultdict:fromcollectionsimportdefaultdict......
  • python3基础语法2
    Python3.0在设计的时候没有考虑向下兼容。官方宣布,2020年1月1日,停止Python2的更新。编码默认情况下,Python3源码文件以 UTF-8 编码,所有字符串都是unico......
  • 小程序 : wxs语法基本使用 -- 类似于过滤器
    第一步,创建wxs并导出functionformatPrice(price){return"¥"+price}functioncalcPrice(books){return"¥"+books.reduce(function(preValue,item)......
  • 小程序 : mustache语法 和 条件渲染 和 列表渲染
    <!--pages/04_learn_wxml/index.wxml--><h1>Mustache语法</h1><view>{{message}}</view><view>{{firstname+""+lastname}}</view><view>{{date}}</view>......
  • 模板语法之继承
    什么是模板继承模板继承就是指可以使父模板的内容重用,子模板直接继承父模板的全部内容,并可以覆盖父模板中相应的块继承的语法父模板中:1.用block标签标识中哪些在子模板......