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

  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

转载于:https://www.cnblogs.com/jpfss/p/11264125.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值