Neo4j文档
Neo4j 图数据库
主要有节点和关系,关系是有向边,节点和关系都有属性,属性是键值对
Neo4j使用CQL语句,代表Cypher查询语言 相当于SQL
统一声明
在所有的语句中均有结构 <node>:<label>表示的是 <数据>:<类型>。
label相当于类型,node相当于对象。
如果文中哪里写的违反此规则可能是当时手误写错。
CQL指令/条款:
| CQL指令 | 说明 |
|---|---|
| CREATE(创建) | 创建节点关系和属性 |
| MATCH(匹配) | 检索有关节点关系和属性数据 |
| RETURN(返回) | 返回查询结果 |
| WHERE(条件) | 提供条件过滤检索数据 |
| DELETE(删除) | 删除节点和关系 |
| REMOVE(移除) | 删除节点和关系的属性 |
| ORDER BY(以…排序) | 排序检索数据 |
| SET(组) | 添加或更新标签 |
CQL函数
| 定制功能 | 用法 |
|---|---|
| String(串) | 用于使用String字面量 |
| Aggregation(聚合) | 用于对CQL查询结果执行一些聚合操作 |
| Relationship(关系) | 用于获取关系的细节 如startnode endnode等 |
CQL数据类型
| CQLs数据类型 | y用法 |
|---|---|
| boolean | 用于表示布尔类型 true和false |
| byte | 用于表示8位整数 |
| short | 用于表示16位整数 |
| int | 用于表示32位整数 |
| long | 用于表示64位整数 |
| float | 用于表示32位浮点数 |
| double | 用于表示64位浮点数 |
| char | 用于表示16位字符 |
| String | 用于表示字符串 |
CREATE指令:
- 创建没有属性的节点
- 使用属性创建节点
- 在没有属性的节点间创建关系
- 使用属性创建节点间关系
- 为节点或关系创建单个或多个标签
CQL创建一个没有属性的节点 用于创建没有属性的节点。 它只是创建一个没有任何数据的节点。
CREATE (:) # 指令 创建的节点名称 节点的标签名称
- Neo4j数据库服务器使用此将此节点详细信息存储在Database.As中作为Neo4j DBA或
Developer,我们不能使用它来访问节点详细信息 - Neo4j数据库服务器创建一个作为内部节点名称的别名。作为Neo4j DBA或Developer
我们应该使用此标签名称来访问节点详细信息
CQL创建具有属性的节点 创建一个具有一些属性(键值对)的节点来存储数据。
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-value>,
...
<Propertyn-name>:<Propertyn-value>
}
)
# 属性是键值对
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
MATCH指令:
- 从数据库中获取有关节点的属性和数据
- 从数据库中获取有关节点,关系的属性和数据
MATCH (
<node-name>:<label-name>
)
# 我们不能单独使用MATCH Command从数据库检索数据 如果单独使用它 那么我们将InvalidSyntax错误
# 如 match (dept:Dept) 会得到Neo.ClientError.Statement.SyntaxError
# Neo.ClientError.Statement.SyntaxError: Query cannot conclude with MATCH (must be RETURN or an update clause) (# line 1, column 1 (offset: 0))
# "match (dept:Dept)"
# ^
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
RETURN指令:
- 检索节点的某些属性
- 检索节点的所有属性
- 检索节点和关联关系的某些属性
- 检索节点和关联关系的所有属性
RETURN
<node-name>.<property1-name>,
...
<node-name>.<propertyn-name>
# 这里也不能单独使用return指令 如果单独使用也会报错 如 return dept.deptno
- 1
- 2
- 3
- 4
- 5
- 6
在CQL中不能单独使用match和return,因为我们需要合并这两个命令从数据库中检索数据
MATCH+RETURN指令:
- 检索节点的某些属性
- 检索节点的所有属性
- 检索节点和关联关系的某些属性
- 检索节点和关联关系的所有属性
MATCH Command
RETURN Command
# 如
# match (dept:Dept) return dept.deptno,dept.dname
# match (exp:Exploment) return exp
- 1
- 2
- 3
使用现有节点创建没有属性的关系
match (<node1-name>:<node1-label-name>), (<node2-name>:<node2-label-name>)
create
(<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-name>)
return <relationship-name>
# 此语句中return是可选的 如果想立即看到结果 则使用它 否则可以省略
- 1
- 2
- 3
- 4
- 5
使用现有节点创建有属性的关系
match (<node1-name>:<node1-label-name>), (<node2-name>:<node2-label-name>)
create
(<node1-name>)-[<relationship-name>:<relationship-label-name>
{<define-propertys-list>}]->(<node2-name>)
return <relationship-name>
# define-propertys-list 任然是键值对
# 可表示为
# {
# <property1-name>:<property1-value>,
# ...
# <propertyn-name>:<propertyn-value>
# }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
使用新节点创建没有属性的关系
create
(<node1-name>:<ndoe1-label-name>)-
[<relationship-name>:<relationship-label-name>]->
(<node2-name>:<node2-label-name>)
return <relationship-name>
- 1
- 2
- 3
- 4
- 5
使用新节点创建有属性的关系
create
(<node1-name>:<node1-label-name>{<define-propertys-list>})-
[<relationship-name>:<relationship-label-name>{<define-propertys-list>}]->
(<node2-name>:<node2-label-name>{<define-propertys-list>})
return <relationship-name>
- 1
- 2
- 3
- 4
- 5
若想在在视图中查看关系 应该使用
match p=(lable1)-[r:r_name]->(lable2) return p
下面的查询是所有有这个关系的
match p=()-[r:r_name]->() return p
下面的查询是返回所有的关系
match p=()-->() return p
为节点创建多个标签
create (m:movie:cinema:film:picture)
WHERE 过滤MATCH查询结果
where <condition>
where <condition> <boolean-operator> <condition>
<condition>语法
<node>.<property-name> <comparison-operator> <value>
CQL中的布尔运算:AND OR NOT XOR
CQL中的比较运算:= <> < > <= >=
使用where子句创建关系
match (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
where <condition>
create (<node1-name>)-[<relationship-name>:<relationship-label-name>
{<relationship-propertys>}]->(<node2-name>)
- 1
- 2
- 3
- 4
DELETE指令
delete <ndoe-name-list> # 使用 , 分割节点名
也不能单独用 要先match下
删除节点 match (node-name:label-name) delete node-name # 前提是没有与此节点相连的关系 否则要先删关系
删除关系 match (node1:label1)-[r]-(node2:label2) dlete r
删库跑路有个很简单的指令 match (d) detach delete d
REMOVE指令
remove <property-name-list>
# <node-name>.<property1-name>,
# ...
# <node-name>.<propertyn-name>
- 1
- 2
- 3
- 4
删除节点属性
match (node:label)
remove node.property
return node
- 1
- 2
- 3
删除节点节点
match (node:label)
remove node:label
return node
- 1
- 2
- 3
SET指令
- 向现有节点或关系添加新属性
- 添加或更新属性值
set <property-name-list>
match (node:label)
where node.property cond val
set node.pro = val
return node
- 1
- 2
- 3
- 4
ORDER BY指令
order by [DESC] # 默认是升序排列ASC 降序需要指明DESC
UNION 将两组结果中的公共行组合并返回到一组结果中
<match command>
return x.x as x
union [all]
<match command>
return y.y as x
# 如果两个查询不返回相同的列名和数据类型会报错`
# 前缀不同也不行 所以要用 as`
- 1
- 2
- 3
- 4
- 5
- 6
- 7
union之后 完全相同的结果只出现一次 加上all之后 有几次显示几次
LIMIT指令 限制返回结果的行数
SKIP指令 跳过返回结果的前几行
MERGE指令
是create和match的组合 在图中搜索给定模式 如果存在返回 否则创建并返回
merge (<node-name>:<label-name>)
{
<property1-name>:<property1-value>
...
<propertyn-name>:<propertyn-value>
}
- 1
- 2
- 3
- 4
- 5
- 6
create可以创建完全相同的结点,使用merge可以判断结点是否存在
使用的时候 相当于create换成了merge即可
CQL将空值视为对节点或关系的属性的缺失值或未定义值 当我们创建一个具有现有节点标签的但未指定其属性值的节点时
它将创建一个具有NULL属性值的新节点
where x.x is not NULL # 可以过滤NULL行
where x.x is NULL # 仅返回NULL行
IN操作符
in [<collection-of-values>]
x.x in [123, 124]
字符串函数
| 函数名 | 描述 |
|---|---|
| UPPER | 用于将所有字母更换为大写 |
| LOWER | 用于将所有字母更换为小写 |
| SUBSTRING | 用于获取给定String的子字符串 |
| REPLACE | 用于替换一个字符串的子字符串 |
在return的值进行限定
return UPPER(x.x)
return LOWER(x.x)
return SUBSTRING(x.x,起始,长度)
return REPLACE(x.x,str1,str2)
Aggregation聚合
| 函数名 | 描述 |
|---|---|
| COUNT | 返回由match命令返回的行数 |
| MAX | 返回由match命令返回的最大值 |
| MIN | 返回由match命令返回的最小值 |
| SUM | 返回由match命令返回的所有行求和 |
| AVG | 返回由match命令返回的所有行的平均值 |
max和min中跟一个x.x 但是函数外面还可以 , y.y 貌似是分group的作用 找每个group的最小值
关系函数
| 函数名 | 描述 |
|---|---|
| STARTNODE | 用于知道关系的开始节点 |
| ENDNODE | 用于知道关系的结束节点 |
| ID | 用于知道节点或关系的ID(唯一) |
| TYPE | 用于知道字符串表示的一个关系的type |
备份数据库和还原数据库
Neo4j的备份和还原比较简单,把数据库整个文件拷贝一份,就可以,还原的时候直接再拷回去即可。
需要注意的是,在拷贝复制的时候 需要把Neo4j服务关闭
需要备份的文件是 D:\Neo4j\neo4j-community-3.3.6\data\databases\graph.db
这里这个位置是我在 D:\Neo4j\neo4j-community-3.3.6\conf\neo4j.conf 下配置的
默认是在 c\Users\[username]\Documents\Neo4j\default.graphdb
索引
- create index 创建索引
- drop index 丢弃索引
create index on :label(property)
drop index on :label(property)
UNIQUE约束
- 避免重复记录
- 强制执行数据完整性规则
create constraint on (label) assert property is unique
# 创建唯一约束
drop constraint on (label) assert property is unique
# 删除unique约束
原文地址:https://blog.csdn.net/hopyGreat/article/details/81120648
Neo4j文档的更多相关文章
- Neo4j 文档
Graph Fundamentals 基础 Basic concepts to get you going. A graph database can store any kind of data u ...
- NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)
摘自:http://www.ituring.com.cn/article/4002# NoSQL系统的数据操作接口应该是非SQL类型的.但在NoSQL社区,NoSQL被赋予了更具有包容性的含义,其意为 ...
- SpringBoot文档
一.Spring Boot 入门 1.Hello World探究 1.POM文件 1.父项目 <parent> <groupId>org.springframework.b ...
- Spring Boot属性文件配置文档(全部)
This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)
原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...
- Spring Boot文档
本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- dotNET跨平台相关文档整理
一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...
- ABP文档 - Javascript Api - AJAX
本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...
随机推荐
- jmeter参数化之用户参数
1. 用badboby进行录制,录制完成后保存,用JMeter格式进行保存,如:登陆.jmx 2. 在jmeter中打开保存的文件登陆.jmx. 3.在step1上右击-添加-前置处理 ...
- vue 可复用swiper以及scoped样式穿透(可以不受scoped的限制来修改样式)
参考: https://blog.csdn.net/dwb123456123456/article/details/82701740https://blog.csdn.net/u014027876/a ...
- 网络结构解读之inception系列四:Inception V3
网络结构解读之inception系列四:Inception V3 Inception V3根据前面两篇结构的经验和新设计的结构的实验,总结了一套可借鉴的网络结构设计的原则.理解这些原则的背后隐藏的 ...
- 最大似然估计(Maximum likelihood estimation)
最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:"模型已定,参数未知".简单而言,假设我们要统计全国人口的身高,首先假设这个身高服从服从正态分布,但是该分布的均值与方差 ...
- [Ceoi2007]Royaltreasury
#1945. [Ceoi2007]Royaltreasury Online Judge:Bzoj-1945 Label:树形Dp,高精度 题目描述 在很久很久以前的一个王国里,王国的财产开始变得越来越 ...
- Luogu P4782 【模板】2-SAT 问题(2-SAT)
P4782 [模板]2-SAT 问题 题意 题目背景 \(2-SAT\)问题模板 题目描述 有\(n\)个布尔变量\(x_1\sim x_n\),另有\(m\)个需要满足的条件,每个条件的形式都是&q ...
- C++星号的含义
[转载] [http://blog.sina.com.cn/s/blog_4a50d85b0100uk3c.html] 1.乘法运算符 2.定义指针 int *p = 0; 还是 int* p ...
- lost connection to MySQL server at waiting for initial communication packet,system error:o
1 可以先测试mysql本地连接石否正常 2 正常的话查看远程连接的IP在mysql中是否有权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIF ...
- UVa-401 Palindromes回文词
虽然是水题,但是容易错.参照了紫书的代码可以写的很简洁.主要还是注意常量数组的使用,能让代码变得简单许多 #include <iostream> #include <cstdio&g ...
- Luogu P1712 [NOI2016]区间(线段树)
P1712 [NOI2016]区间 题意 题目描述 在数轴上有 \(N\) 个闭区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\) .现在要从中选出 \(M\) 个区间, ...