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 (:) # 指令 创建的节点名称 节点的标签名称

  1. Neo4j数据库服务器使用此将此节点详细信息存储在Database.As中作为Neo4j DBA或

    Developer,我们不能使用它来访问节点详细信息
  2. 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文档的更多相关文章

  1. Neo4j 文档

    Graph Fundamentals 基础 Basic concepts to get you going. A graph database can store any kind of data u ...

  2. NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)

    摘自:http://www.ituring.com.cn/article/4002# NoSQL系统的数据操作接口应该是非SQL类型的.但在NoSQL社区,NoSQL被赋予了更具有包容性的含义,其意为 ...

  3. SpringBoot文档

    一.Spring Boot 入门 1.Hello World探究 1.POM文件 1.父项目 <parent>   <groupId>org.springframework.b ...

  4. Spring Boot属性文件配置文档(全部)

    This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...

  5. 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)

    原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...

  6. Spring Boot文档

    本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...

  7. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  8. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  9. ABP文档 - Javascript Api - AJAX

    本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...

随机推荐

  1. C# GDI+编程(二)

    常用的绘图函数 DrawArc绘制一个弧形 示例:graphics.DrawArc(pen,,,,,,) 倒数第二个参数,表示起始度数,最后一个参数是弧形的跨越度数.比如起始度数是90,跨越度数是12 ...

  2. [Ceoi2010]Pin

    #2012. [Ceoi2010]Pin Online Judge:Bzoj-2012 Label:容斥,STL 题目描述 给出N(2<=N<=50000)个长度为4的字符串,问有且仅有D ...

  3. leetcode 1071 Greatest Common Divisor of Strings

    lc1071 Greatest Common Divisor of Strings 找两个字符串的最长公共子串 假设:str1.length > str2.length 因为是公共子串,所以st ...

  4. Java开源诊断工具 Arthas 发布v3.1.0

    Arthas 自2018年9月份上线以来「传送门」,已收获近万个star,感谢开发者们的认可.此次Arthas 3.1.0版本的发布,不仅带来大家投票出来的新LOGO,还带来强大的新功能和更好的易用性 ...

  5. HZOI20190822模拟29题解

    题面:https://www.cnblogs.com/Juve/articles/11396238.html 下面开始一句话题解: A:爬山: 二分答案,check即可 #include<ios ...

  6. 关于mysql8授权的问题,mysql萌新小白采坑记录

    记录本人第一次使用mysql时踩的坑,因为我从官网下载最新的版本8.0.15msi版本的,直接下一步下一步安装完成之后,本地访问正常,然后服务器安装访问也正常.然后本地连接服务器上的mysql时报错. ...

  7. autoreleasing的用法介绍:

    在c/c++,objective-c内存管理中有一条是:谁分配谁释放. __autoreleasing则可以使对像延迟释放.比如你想传一个未初始化地对像引用到一个方法当中,在此方法中实始化此对像,那么 ...

  8. 【JZOJ5179】【NOI2017模拟6.29】哈哈

    题意 给定一个长度为n的序列,你可以进行若干次操作: 选择一个区间,删掉,并获得Val[Len]的得分,Len为这个区间的长度: 其中这个区间满足: 1.相邻两个数差的绝对值为1 2.每个数都大于相邻 ...

  9. [code] if (x<0)x=0;else if (x>255)x=255;

    //颜色范围0-255: // 1.原始: )tem_b=;)tem_b=; )tem_g=;)tem_g=; )tem_r=;)tem_r=; //2.使用条件状态值生成掩码来移除条件分支 tem_ ...

  10. PL/SQl连接数据库ORA-12154错误

    先说说我遇到的问题: 1.在sql/plus下可以正确连接到数据库(oracle10g): 2.检查我机器(64)位环境变量的配置,没问题.path环境变量没问题(C:\oraclexe\app\or ...