当前位置:   article > 正文

neo4j CQL使用_cqneojs

cqneojs

neo4j CQL使用

Neo4j的Cypher语言是为处理图形数据而构建的,CQL代表Cypher查询语言。像Oracle数据库具有查询 语言SQL,Neo4j具有CQL作为查询语言。

  • 它是Neo4j图形数据库的查询语言。

  • 它是一种声明性模式匹配语言

  • 它遵循SQL语法。

  • 它的语法是非常简单且人性化、可读的格式。

常用命令

官方网址:网址

LOAD CSV

导入csv到neo4j

注意 :把csv文件放在neo4j安装目录下的import文件夹里

#将csv拷贝到 %NEO4J_HOME%\import目录
load csv from 'file:///西游记.csv' as line
create (:西游 {name:line[0],tail:line[1],label:line[3]})
  • 1
  • 2
  • 3

create 创建

创建节点
#创建简单节点
create (n) 
#创建多个节点
create (n),(m)

#创建带标签和属性的节点并返回节点
create (n:person {name:'如来'}) return n
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
创建关系

Neo4j图数据库遵循属性图模型来存储和管理其数据。

根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。

基于方向性,Neo4j关系被分为两种主要类型。

  • 单向关系
  • 双向关系
#使用新节点创建关系
CREATE (n:person {name:'杨戬'})-[r:师傅]->(m:person {name:'玉鼎真人'}) return type(r)

#使用已知节点创建带属性的关系
match (n:person {name:'沙僧'}),(m:person{name:'唐僧'})
create (n)-[r:`师傅`{relation:'师傅'}]->(m) return r

#检索关系节点的详细信息
match (n:person)-[r]-(m:person) return n,m
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
创建全路径
create p=(:person{name:'蛟魔王'})-[:义兄]->(:person{name:'牛魔王'})<-[:义兄]- (:person {name:'鹏魔王'}) return p
  • 1

match 查询

Neo4j CQL MATCH命令用于

  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据
MATCH (n:`西游`) RETURN n LIMIT 25
  • 1

RETURN 返回

Neo4j CQL RETURN子句用于

  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点和关联关系的某些属性
  • 检索节点和关联关系的所有属性
MATCH (n:`西游`) RETURN id(n),n.name,n.tail,n.relation
  • 1

WHERE子句

像SQL一样,Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果。

MATCH (n:person) where n.name='孙悟空' or n.name='猪八戒' RETURN n
#创建关系
match (n:person),(m:person) where n.name='孙悟空' and m.name='猪八戒' create (n)-[r:师弟]->(m) return n.name,type(r),m.name
  • 1
  • 2
  • 3

DELETE 删除

Neo4j使用CQL DELETE子句

  • 删除节点
  • 删除节点及相关节点和关系

注意:删除节点时,前提:节点不存在关系

# 删除节点 (前提:节点不存在关系)
MATCH (n:person{name:"白龙马"}) delete n

# 删除关系
MATCH (n:person{name:"沙僧"})<-[r]-(m) delete r return type(r)
  • 1
  • 2
  • 3
  • 4
  • 5

REMOVE 删除

向现有节点或关系添加或删除属性。我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。

  • 删除节点或关系的标签
  • 删除节点或关系的属性
#删除属性
MATCH (n:role {name:"fox"}) remove n.age	return n

#创建节点
CREATE (m:role:person {name:"fox666"}) 
#删除标签
match (m:role:person {name:"fox666"}) remove m:person	return m
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

SET 子句

向现有节点或关系添加新属性。Neo4j CQL提供了一个SET子句。

  • 向现有节点或关系添加新属性
  • 添加或更新属性值
MATCH (n:role {name:"fox"}) set n.age=32	return n
  • 1

ORDER BY 排序

Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。

我们可以按升序或降序对行进行排序。默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。

MATCH (n:`西游`) RETURN id(n),n.name order by id(n) desc
  • 1

UNION 子句

与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果

  • UNION

    它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。

    限制:

    结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。

  • UNION ALL

    它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。

    限制:

    结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该 是相同的。

MATCH (n:role) RETURN n.name as name 
UNION
MATCH (m:person) RETURN m.name as name


MATCH (n:role) RETURN n.name as name 
UNION all
MATCH (m:person) RETURN m.name as name
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

LIMIT和SKIP子句

Neo4j CQL已提供LIMIT 子句和SKIP 来过滤或限制查询返回的行数。

LIMIT返回前几行,SKIP忽略前几行

# 前两行
MATCH (n:`西游`) RETURN n LIMIT 2
# 忽略前两行
MATCH (n:person) RETURN n SKIP 2
  • 1
  • 2
  • 3
  • 4

NULL值

Neo4j CQL将空值视为对节点或关系的属性的缺失值或未定义值。

当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有NULL属性值的新节点。

match (n:`西游`) where n.label is null return id(n),n.name,n.tail,n.label
  • 1

IN操作符

与SQL一样,Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。

match (n:`西游`) where n.name in['孙悟空','唐僧'] return id(n),n.name,n.tail,n.label
  • 1

INDEX索引

​ Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。我们可以为具有相同标签名称的所有节点的属性创建索引。

我们可以在MATCH或WHERE或IN运算符上使用这些索引列来改进CQL Command的执行。

Neo4J 索引操作

  • Create Index 创建索引
  • Drop Index 丢弃索引
# 创建索引
create index on :`西游` (name) # 删除索引
drop index on :`西游` (name)
  • 1
  • 2
  • 3

UNIQUE约束

在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使您使用相同的值,它也会插入一个新行。 根据我们对某些节点或关系的应用需求,我们必须避免这种重复。

像SQL一样,Neo4j数据库也支持对NODE或Relationship的属性的UNIQUE约束

UNIQUE约束的优点
  • 避免重复记录。
  • 强制执行数据完整性规则
#创建唯一约束
create constraint on (n:xiyou) assert n.name is unique 
#删除唯一约束
drop constraint on (n:xiyou) assert n.name is unique
  • 1
  • 2
  • 3
  • 4

DISTINCT

这个函数的用法就像SQL中的distinct关键字,返回的是所有不同值

match (n:`西游`) return distinct(n.name)
  • 1

练习命令

1 查询出luoye的同学

match (n:Demo {name:"luoye"})-[:demo1 {relation:"同学"}]->(m) return m
  • 1

2 查询出luoye关系路径最高为2的实体

match (n:Demo {name:"luoye"})-[*1..2]-(m) return m
  • 1

neo4j-admin使用

数据库备份

对Neo4j数据进行备份、还原、迁移的操作时,要关闭neo4j

cd %NEO4J_HOME%/bin #关闭neo4j
neo4j stop #备份
neo4j-admin	dump --database=graph.db --to=/neo4j/backup/graph_backup.dump
  • 1
  • 2
  • 3

数据库恢复

还原、迁移之前 ,要关闭neo4j服务

#数据导入
neo4j-admin load --from=/neo4j/backup/graph_backup.dump --database=graph.db -- force
#重启服务
neo4j start
  • 1
  • 2
  • 3
  • 4

利用CQL构建明星关系图谱

#导入明星数据
load csv from 'file:///明星1.csv' as line create (:star {num:line[0],name:line[1]})
load csv from 'file:///明星关系数据1.csv' as line create (:starRelation
{from:line[0],subject:line[1],to:line[2],object:line[3],relation:line[4]})

#查询明星关系
match (n:star),(m:starRelation),(s:star) where n.name='刘烨' and m.subject='刘烨' and s.name=m.object
return n.name,m.relation,s.name

# 创建关系 构建明星关系图谱
match (n:star),(m:starRelation),(s:star) where n.name='刘烨' and m.subject='刘烨' and s.name=m.object
create (n)-[r:关系{relation:m.relation}]->(s) return n.name,m.relation,s.name

#查看明星关系
MATCH p=(n:star{name:'刘烨'})-[r:`关系`]->() RETURN p
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

刘烨’ and s.name=m.object
return n.name,m.relation,s.name

创建关系 构建明星关系图谱

match (n:star),(m:starRelation),(s:star) where n.name=‘刘烨’ and m.subject=‘刘烨’ and s.name=m.object
create (n)-[r:关系{relation:m.relation}]->(s) return n.name,m.relation,s.name

#查看明星关系
MATCH p=(n:star{name:‘刘烨’})-[r:关系]->() RETURN p


  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/369755
推荐阅读
相关标签
  

闽ICP备14008679号