Neo4j - CQL(Cypher)基本操作(一)

更多可以阅读https://blog.csdn.net/column/details/23835.html

Neo4j

标签属性图模型
• Nodes – 节点。在其他图模型中称作“点”、“顶点”、“对象”。
• Relationships – 关系。在其他图模型中也称作“边”、“弧”、“线”。关系拥有类型。
• Properties – 属性,可以定义在节点和关系上。
• Labels – 标签,代表节点的类别。
这里写图片描述
这里写图片描述

Neo4j与MySQL

这里有列出了一些与关系型数据库对应的概念方便理解:
这里写图片描述

动机
类似与关系型数据库,创建了多个数据库
想要像访问关系型数据库那样来可以无缝切换多个数据库
然而,在neo4j 3.0都暂时没有办法做到:每次启动neo4j,它只能读取一个数据库。
比如,现在有两个数据库graph.db,graph2.db。假设neo4j默认的数据库为graph.db,启动neo4j,这时候想要访问graph2.db,必须修改neo4j的配置文件,将数据库改为graph2.db,重启,此时才可以访问graph2.db.

那么,如何可以比较neat地切换数据库呢?

配置
Linux环境 同 博客:neo4j远程访问

方法
方法一:修改配置文件
这是官方文档方法
大概思路是:

新建一个conf_test文件
修改neo4j.conf:

# The name of the database to mount
dbms.active_database=graph2.db //你的数据库

将新的neo4j的配置文件的路径设为当前session的环境变量。
重启neo4j
问题 来了,我每次都要先新建一个conf文件夹,修改conf文件,再设置环境变量,据麻烦!!!

方法二:建立graph.db的软连接【推荐!!!】
(突然走向了大甩卖的风格了 -_-#)

不需要修改配置文件,不需要设置环境变量

首次修改:
// 请将$NEO4j_HOME改为你的neo4j的安装路径

cd $NEO4j_HOME/data/databases/
// 保存原来数据库
mv graph.db graph1.db
//建立指向新数据库的软件接
ln -s graph2.db graph.db

//重启neo4j
cd $NEO4j_HOME/bin
./neo4j restart

再次修改
倘若我想访问graph3.db,就很简单了

//建立指向新数据库的软件接

ln -s graph3.db graph.db

//重启neo4j
cd $NEO4j_HOME/bin
./neo4j restart

CQL基本简介

Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,由于Neo4j在图形数据库家族中处于绝对领先的地位,拥有众多的用户基数,使得Cypher成为图形查询语言的事实上的标准
CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。

Cypher语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的
这里写图片描述

CQL数据类型

S.No.CQL数据类型用法
1.boolean用于表示布尔文字:true,false。
2.byte用于表示8位整数。
3.short用于表示16位整数。
4.int用于表示32位整数。
5.long用于表示64位整数。
6.floatI用于表示32位浮点数。
7.double用于表示64位浮点数。
8.char用于表示16位字符。
9.String用于表示字符串。

常用CQL命令与函数

通过常用命令实现图数据的增删改查

S.No.CQL命令/条用法
1。CREATE
创建
创建节点,关系和属性
2。MATCH
匹配
检索有关节点,关系和属性数据
3。RETURN
返回
返回查询结果
4。WHERE
哪里
提供条件过滤检索数据
5。DELETE
删除
删除节点和关系
6。REMOVE
移除
删除节点和关系的属性
7。

ORDER BY

以…排序

排序检索数据
8。SET
添加或更新标签

常用函数

S.No.定制列表功能用法
1。String
字符串
它们用于使用String字面量。
2。Aggregation
聚合
它们用于对CQL查询结果执行一些聚合操作。
3。Relationship
关系
他们用于获取关系的细节,如startnode,endnode等。

图数据的形式

这里写图片描述

这里写图片描述
这里写图片描述

基本语法

节点

节点必须包含在括号 () 内

(n:Label1:Label2)

• 标签名前必须有冒号
• 节点可以有多个标签
• 标签对节点进行分类,似关系数据库中的表 标签对节点进行分类,类似关系数据库中的表

(n)

节点可以没有或者不指定标签

(n:Label {prop: 'value'})

节点可以有属性

关系

关系两端各有一个短横线 /减号,用方括包含关系类型 ,关系类型名前面必须有冒号 (:) 。在其中一端用 >或 < 代表关系的方向,也可以没有方向

  - -  ,<- -,- ->
  -[:DIRECTED]- ->

关系以短划线\减号和方括号包含
与标签一样关系类型前必须要有“:”

- ->或 -[r:TYPE] ->

关系在创建时必须指定方向
关系在查询时可以不指定方向表示双向关系

< >指定关系的方 向

关系也可以有属性

-[:KNOWS {since: 2010}]

模式

模式是由关系连接起来的节点构成的表达式,关系可以是有方向的,也可以没有方向,双向的

() -[] -()
() -[] ->()
()< -[] -()

模式的例子

(n:Label {prop:'value'})-[:TYPE]- >(m:Label)
  • 最基本的模式:由一类关系连接两个节点 最基本的模式:
  • 由一类关系连接两个节点
(p1:Person {name:'Alice'}) -[:KNOWS][->(p2:Person {name:'Bob'})

如果存在从Alice到Bob的、类型为KNOWS的关系,那么上面模式会将匹配的节点保存在 p1 和p2中。

Cypher查询的组成部分

eg1.
这里写图片描述
eg 2.
这里写图片描述
eg 3.
这里写图片描述

图查询的结果 vs表状数据结果

eg 4.
这里写图片描述

这里写图片描述

命名规范

这里写图片描述

参考文献:Neo4j Inc. APAC 2018年 俞方桦
参考文献:https://www.cnblogs.com/wenruo/p/7850120.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章