I、数据库使用版本信息
neo4j 3.1.0 社区版本
neo4j 4.0.9 社区版本
neo4j 4.2.11 企业版本
II、Neo4j 4.2.11企业版本
主要用作性能测试:
III、数据库操作
0、数据库browser 查询结果配置
显示所有配置:
:config
{ "maxHistory": 30, "theme": "auto", "initCmd": ":play start", "playImplicitInitCommands": true, "initialNodeDisplay": 300, "maxNeighbours": 100, "showSampleScripts": true, "browserSyncDebugServer": null, "maxRows": 1000, "maxFieldItems": 500, "autoComplete": true, #关系自动扩展 "scrollToTop": true, "maxFrames": 15, "codeFontLigatures": true, "useBoltRouting": false, "editorLint": false, "enableMultiStatementMode": true, "connectionTimeout": 30000, "showPerformanceOverlay": false, "allowCrashReports": true, "allowUserStats": true, "showWheelZoomInfo": false }
修改默认配置:参考浏览器设置 - Neo4j 浏览器
如:#关系自动扩展 关闭
:config autoComplete:false
1、查询数据库
show databases;
2、创建数据库
数据库名称不能为中文,且不能以数字开头,不能为纯数字或包含点,破折号等字符.
CREATE DATABASE d732716aeb831c469ea469
3、切换数据库
:use d732716aeb831c469ea469
4、删除数据库
drop DATABASE d732716aeb831c469ea469
5、数据库别名创建
CREATE ALIAS `northwind` FOR DATABASE `northwind-graph-2020`
6、数据库别名更改
ALTER ALIAS `northwind` SET DATABASE TARGET `northwind-graph-2021`
7、数据库别名删除
DROP ALIAS `northwind` IF EXISTS FOR DATABASE
IIII、数据操作
1 数据添加
merge (n:Country {name:'中国'})
节点数据写入:从csv文件写入
//写入户主节点
LOAD CSV WITH HEADERS FROM "file:///persons.csv" AS line
merge(:个人{name:line.name})
关系数据写入:从csv文件写入
//写入户主关系
LOAD CSV WITH HEADERS FROM "file:///pr.csv" AS line
MATCH (entity1:户主{name:line.from}),(entity2:户主{name:line.to})
merge(entity1)-[:户主关系{name:line.link,type:'户主关系'}]->(entity2)
2 数据修改
修改节点属性
//设置户主tag1个人或企业性质
MATCH (n:`户主`)
WHERE EXISTS(n.name) and size(n.name) >3
set n.tag1 = '企业'
3 数据查询
//属性模糊查询:
官网说明:
Cypher supports filtering using regular expressions. The regular expression syntax is inherited from the Java regular expressions. This includes support for flags that change how strings are matched, including case-insensitive
(?i)
, multiline(?m)
and dotall(?s)
. Flags are given at the beginning of the regular expression, for exampleMATCH (n) WHERE n.name =~ '(?i)Lon.*' RETURN n
will return nodes with name 'London' or with name 'LonDoN'.note:
(?i)
:查询不区分大小写
(?m)
:跨行查询:
正则表达式中出现了^或者$, 默认只会匹配第一行. 参考正则表达式Pattern.DOTALL、(?s)、Pattern.MULTILINE、(?m)_小百菜的博客-CSDN博客_pattern.multiline(?s):dotall,即Singleline(单行模式):(?s)。表示更改.的含义,使它与每一个字符匹配(包括换行 符\n),默认情况下, 正则表达式中点(.)不会匹配换行符, 设置了Pattern.DOTALL模式, 才会匹配所有字符包括换行符。
//查询name属性中包含【张】的节点
MATCH (n)
WHERE n.name =~ ".*张.*"
RETURN n.name
//查询name属性中包含【zhang|Zhang】
MATCH (n)
WHERE n.name =~ '(?i).*hang.*'
RETURN n.name
//【户主】节点关系数量统计并排序
MATCH p=(n)-[r:`银行账户`]->(m)
return distinct n.name,count(r) as cnt order by cnt desc
//多节点多层户主关系查询
match data=(p:户主)-[:`户主关系`*2..5]-(e)
with p,collect(distinct e.name) as famis
match (p:户主)-[:`户主关系`*1..5]-(f)
with p,famis,collect(distinct f.name) as famis1,(famis+p.name) as names
where size(famis1)>2 and size(names)>2
return p.name as major,names,famis1
//关系查询
MATCH path=((entity1)-->()<--(co)-->()<--(entity2))
WHERE entity1.name = "韩十八" and NOT (entity1)-->()<--(entity2)
RETURN path
IIIII、apoc使用
//节点标签分类统计
CALL db.labels() YIELD label
CALL apoc.cypher.run('MATCH (:`'+label+'`) RETURN count(*) as count',{}) YIELD value
RETURN label, value.count
//关系标签分类统计
//关系分类统计
call db.relationshipTypes() yield relationshipType as relatypes
call apoc.cypher.run('match ()-[:`'+relatypes+'`]->() return count(*) as count',{}) yield value
return relatypes,value.count