1.创建中心节点
CREATE (<node-name>:<label-name1>:<label-name2> ... ... :<label-namen>)
CREATE(n:schema{name:'标签体系',code:'CENTER'})
2.创建关系
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
MATCH (n:schema{name: '标签体系'}),(m:schema{name:'生态文明载体'})
CREATE (n)-[r:包含]->(m)
Merge关键字(有则返回,无则创建)
Create关键字(不管有没有都创建)
3.同时创建节点和关系
CREATE
(<node1-label-name>:<node1-name>{<define-properties-list>})-
[<relationship-label-name>:<relationship-name>{<define-properties-list>}]->(<node1-label-name>:<node1-name>{<define-properties-list>})
match (n:`标签名`)-[r]-(m:`标签名`) set r.属性名 = n.属性名
5.给一类标签的实体添加一个属性(便于检索)
MATCH (n:HHKD) SET n.name=n.RVNAME
6.为已存在的节点创建新标签
MATCH (e:标签名) set e:新的标签名 return e
1.删除节点
MATCH (r)
WHERE id(r) = 492
DELETE r
2.同时删除指定关系和节点
MATCH (p1:Person)-[r:LOVES]-(p2:Person)
DELETE p1,p2,r
3.删除所有关系
match ()-[r]-() delete r
4.删除某一类关系
MATCH p=()-[r:`实例`]->() delete r
5.删除节点的某一属性
Match(n:标签名称) remove n.属性名称
6.删除某一类标签(bingo)
#It would have 4 labels: Movie, Cinema, Film, and Picture.To remove the Picture label from all movies
MATCH(m:Movie)
REMOVE m:Picture
RETURN m
1.修改节点属性值
MATCH (r)
WHERE id(r) = 501
SET r.属性名称 = "属性值"
2.修改某属性值的类型为int(bingo)
关于其中方法: toInt()返回Longs,toFloat()返回Doubles。
MATCH (n:Type) SET n.strProp = toInt(n.strProp)
1.查询示例
Match (n:PWK)-[rel:PWK_ZJHL]->(m:HL) where n.ZJHL="赣江" return m,rel,n
match data=(n:PWK{})-[rel]-(m:HL) where rel.ZJHLJL<500 return data
MATCH data=(n:ZRBHD)-[r:`保护`]->(m:HP) where n.JB="国家级" return data
2.检索某一类实体
MATCH (n:STQJXLYJS) return n
3.查询同时存在症状」头痛」和」发热」的疾病节点
match (a)-[r]-(b) where b.name in ['头痛','发热'] return a limit 5
4.查询多跳关系
match data=(n: 标签名)-[*1..3]->(m: 标签名) return data
1.计算节点的出入度
#度:
size((n)--())
#出度:
size((n)-[]->())
#入度:
size(()-[]->(n))
2.统计某一类关系的数量
#方法一
MATCH ()-[r: `实例`]->() return COUNT(r);
#方法二
MATCH (:`标签名`)-[r: `实例`]->() return COUNT(r);
3.模糊查询
#①(正则查询)
Match data=(n:Person) where n.name=~’Jack.*’ return data
#②(包含查询)
Match data=(n:Person) where n.name contains ‘J’ return data
正则表达式使用
1°不区分大小写(?i)、多行(?m)和 dotall (?s)
#示例
MATCH (n) WHERE n.name =~ '(?i)Lon.*' RETURN n
2°在正则表达式中转义(类似.和 *等)
#示例
MATCH (n:Person) WHERE n.email =~ '.*\\.com' RETURN n.name, n.age, n.email
4.最短路径查询
Match (n:Person{name:张三}),(m:Person{name:李四}),
data=shortestpath((n)-[*..10]-[m]) return data
5.所有路径查询
Match (n:Person{name:张三}),(m:Person{name:李四}),
data=allshortestpaths((n)-[*..10]-[m]) return data
6.计算所有节点的出入度并添加为属性
MATCH (k) WITH k
size((k)--()) as degree
SET k.degree=degree;
7.统计某一标签下所有节点的某一属性之和
MATCH (n:Person)
RETURN sum(n.property)
8.计算某一标签下所有节点的某一属性的平均值
MATCH (n:Person)
RETURN avg(n.property)
9.计算某一类节点的数量
MATCH (n :Person)
RETURN count(*)
10.创建约束(避免重复记录;强制执行数据完整性规则)
create constraint on (n:student) assert n.name is unique
#删除约束的语法
drop constraint on (n:xiyou) assert n.name is unique
11.去重函数distinct(返回的是所有不同值。)
match (n: student) return distinct(n.name)
12创建索引的语法(索引是创建在属性上的,目的是为了提高查询速度)
Create index on:<标签名称>(属性名称)
#删除索引的语法
drop index on:<标签名称>(属性名称)
13 not的用法(Cypher中没有not in,可以使用in再取反)
Match (n) where not(name in keys(n)) return n
14 Exists(判断是否包含某一属性)
Match (n) where exists (n.name) return type(n)
15.查询知识图谱的schema
Call db.schema()
16 查询多跳多关系
match path = (m:HL{name:"***"})-[:`**`|:`**`|:`***`*]-(n) return path limit 100
对Neo4j数据进行备份、还原、迁移的操作时,需要先关闭Neo4j
1.数据库备份
#关闭neo4j
neo4j stop(一定要先执行neo4j install -service,才可以执行neo4j stop)
#备份
neo4j-admin dump --database=schema_test.db --to=D:\software\neo4j-community-3.5.28\backup_data\graph_backup1011.dump
#(备份文件的存放位置是D:\software\neo4j-community-3.5.28\backup_data,备份文件的名称是graph_backup1011.dump)
2.数据库恢复
#关闭neo4j
neo4j stop
#数据导入
neo4j-admin load --from=D:\software\neo4j-community-3.5.28\backup_data\graph_backup1009.dump --database=backup_test.db --force
#重启服务
neo4j start
出现问题记录:执行备份数据库命令后提示未能加载指定模块,
解决方式:将neo4j安装目录中bin下的配置文件neo4j-admin.ps1进行修改,将其ImportModel语句中的相对路径修改为绝对路径
————————————————————不定时更新————————————