Cypher基本语法
郝伟 2021/02/18
基本语法: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
-- 返回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
Delete: 删除孤立的节点
Delete Detach: 删除有关系的节点
Remove: 删除关系和属性
语法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.
语法:MATCH (node:label{properties}) REMOVE node.property RETURN node
-- 删除 Message 的 Text 属性 MATCH (n:Message) REMOVE n.text RETURN n
创建: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.
MATCH (n) WITH DISTINCT labels(n) AS labels UNWIND labels AS label RETURN DISTINCT label Order By label
系统提供了很多数据库存储过程(procedure)位于 db 命名空间中,通过调用命令 call (更多调用方法介绍)能够实现一些数据库的统计功能,如 call db.labels() 返回所有的标签,以下是相关函数。注意,一些存储过程支持参数,暂时下表还没有加入。
| 函数名称 | 作用 |
|---|---|
| db.labels() | 显示所有标签 |
| db.schema() | 显示系统架构 |
| db.schema.visualization() | 显示系统架构,隐藏细节 |
| db.propertyKey() | 所有属性键值 |
| db.schema.nodeTypeProperties() | 显示所有节点对应的属性值列表(有节点信息) |
系统自带的 db.* 功能有限,所以有了第三方的 APOC 扩展库,提供了更多的存储过程。
如果使用的是社区版,具体使用方法如下:
dbms.security.procedures.unrestricted=apoc.*