Cypher基本语法 郝伟 2021/02/18 [TOC]
1. 1 创建元素
1.1. 创建节点
1.2. 创建关系
基本语法:CREATE (node1)-[:RelationshipType]->(node2)
一些示例
-- 通过查询创建关系
MATCH (a:Labe1), (b:Labe2)
WHERE a.name = "nameofnode1" AND b.name = " nameofnode2"
CREATE (a)-[: Relation]->(b)
RETURN a,b
-- 复杂查询并创建关系
MATCH (a:player), (b:Country) WHERE a.name = "Shikar Dhawan" AND b.name = "India"
CREATE p=(a)-[r:BATSMAN_OF]->(b)
RETURN p
--支持插入节点-关系-节点语法,如同时创建语法3个节点和2条关系,但是不返回
CREATE
(adam:User { name: 'Adam' }), (pernilla:User { name: 'Pernilla' }), (david:User { name: 'David'}),
(adam)-[:FRIEND{since:2018}]->(pernilla), (pernilla)-[:FRIEND]->(david)
-- 复杂查询并创建关系
MATCH (a:Person), (b:Person) WHERE ID(a) = 121 AND ID(b) = 122
CREATE p=(a)-[:FRIENDS]->(b)
RETURN p
2. 2 查询
-- 返回ID为65110的节点
MATCH (s) WHERE ID(s) = 65110 RETURN s
-- 查询语法
MATCH
(user:User { name: 'Adam' })-[r1:FRIEND]-()-[r2:FRIEND]-(friend_of_a_friend)
RETURN
friend_of_a_friend.name
AS
fofName
3. 3 删除
Delete: 删除孤立的节点 Delete Detach: 删除有关系的节点 Remove: 删除关系和属性
3.1. 删除节点或关系
语法1:Match (n:<label>) Delete n
语法2:Match (n:<label>) Detach Delete n
两种语法区别在于如果节点有关系,语法1删除不了,会报类似以下的错误,使用语法2会取消关系,则不会报错。
Neo.ClientError.Schema.ConstraintValidationFailed
Cannot delete node<45>, because it still has relationships. To delete this node, you must first delete its relationships.
使用语法2的删除速度如下:
Deleted 30555 nodes, deleted 2 relationships, completed after 873 ms.
3.2. 删除标签或属性
语法:MATCH (node:label{properties}) REMOVE node.property RETURN node
-- 删除 Message 的 Text 属性
MATCH (n:Message) REMOVE n.text RETURN n
4. 4 高级操作
4.1. 索引
创建:CREATE INDEX ON :<label_name> (<property_name>)
删除:DROP INDEX ON :<label_name> (<property_name>)
-- 创建索引
CREATE INDEX ON:Message(name)
-- Added 1 index, completed after 16 ms.
-- 删除索引
DROP INDEX ON :Message (name)
-- Removed 1 index, completed after 14 ms.
4.2. 唯一查询并排序
MATCH (n)
WITH DISTINCT labels(n) AS labels
UNWIND labels AS label
RETURN DISTINCT label
Order By label
4.3. 查看数据库统计信息
系统提供了很多数据库存储过程(procedure)位于 db
命名空间中,通过调用命令 call
(更多调用方法介绍)能够实现一些数据库的统计功能,如 call db.labels()
返回所有的标签,以下是相关函数。注意,一些存储过程支持参数,暂时下表还没有加入。
| 函数名称 | 作用 |
|:------|:------|
| db.labels() | 显示所有标签 |
| db.schema() | 显示系统架构 |
| db.schema.visualization() | 显示系统架构,隐藏细节 |
| db.propertyKey() | 所有属性键值 |
| db.schema.nodeTypeProperties() | 显示所有节点对应的属性值列表(有节点信息) |
4.4. APOC扩展库
系统自带的 db.*
功能有限,所以有了第三方的 APOC 扩展库,提供了更多的存储过程。
如果使用的是社区版,具体使用方法如下:
- 下载 APOC .jar file (https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases)
- 复制至 neo4j 安装目录
- 在 neo4j.conf 配置文件中, 打开 允许加载 APOC 功能选项:
dbms.security.procedures.unrestricted=apoc.*
- 重启服务器