目录
Cypher
文档链接: https://neo4j.com/docs/cypher-manual/4.3/.
1.创建
- 创建结点
create (n:teacher{name:“2”,id:”teacher1”}) return n - 创建关系
MATCH (a:TEST),(b:TEST)
WHERE a.name = ‘TEST-NAME’ AND b.name = ‘TEST-NAME1’
CREATE (a)-[r:RELTYPE] -> (b)
RETURN r
2.查询
- 显示所有
MATCH(n) RETURN n - 显示20个结点
MATCH(n) RETURN n limit 20 - 查询结点
MATCH(n:User{name:“2”}) RETURN n - 查询关系
match ()-[r:watch]->() return r - 根据属性查询结点
match(n:course) where (n.marked=TRUE) return count(n) - 根据关系类型查询
match(n)-[r]->(m) where type®=“teach” return n - 查询结点数量
MATCH(n:User{name:“2”}) RETURN count(n) - 查询结点数量
MATCH(n:User{name:“2”}) RETURN count(n) - 查询有关系的结点
match(n) where ((n)-[]-()) return n - 查询没有关系的course结点
match(n:course) where not ((n)-[]-()) return n - 查询与course没有关系的结点
match(n) where not ((n)-[]-(p:course)) return n - 查询结点的所有标签、每个标签的节点数量
MATCH (n) RETURN distinct labels(n), count(*) - 查询ID结尾是”数学”的结点
match(n) where n.id ENDS WITH ‘数学’ return n - 查询ID开头是”数学”的结点
match(n) where n.id START WITH ‘数学’ return n
match(n) where n.id =~ ‘数学.*’ return n - 查询ID开头是”and”(不区分大小写)的结点
match(n) where n.id =~ ‘(?!)数学.*’ return n - 查询ID结尾是”.com”的结点
match(n) where n.id =~ ‘.*\.com’ return n - 查询ID包含”数学”的结点
match(n) where n.id CONTAINS ‘数学’ return n - 查询含有属性name的结点
match(n) where exists (n.name) return n - 查询A类型或B类型的关系
match()->[r:A|:B]->() return r - 查找结点之间的所有最短路径
match(n),(m),p=allShortestPaths((n)-[*]-(m)) - 查找结点之间的最短路径,路径最大长度为10
match(n),(m),p=shortestPath((n)-[*…10]-(m)) return p - 查找结点的1~3跳关系(有点不确定,慎用)
match(n)-[r:SHIP*1…3]-(m) - 查询并显示多个关系
MATCH p=()-[r:prerequisite]->(),q=()-[wr:taught]->() RETURN p,q
3.修改
Delete用于删除图元素(节点、关系、或路径),若要也删除与之相连的关系则用detach delete。
remove 语句用于删除图元素的属性和标签。
- 清空数据库
match (n) detach delete n - 添加结点的属性(若结点不存在会新建结点)
MERGE (n:Course) ON MATCH SET n.name=”yang” - 删除节点及其相关关系
match (n:teacher) detach delete n - 删除结点属性
match (n {name: “huzong”}) remove n.age - 删除结点标签
match (n {name “huzong”}) remove n:teacher - 删除结点多个标签
match (n {name “huzong”}) remove n:teacher:user - 删除结点/关系
MATCH (n:User) -[r:study]-(p:Course{name:“f”}) DELETE n,r,p - 设置与course结点有关的路径上的结点的属性
MATCH p = (t:course)-[r]-(A) FOREACH (n in nodes§| SET n.marked = TRUE )
4.排序 ORDER BY
Order by 是紧跟RETURN或者WITH的子句。
- 根据属性对节点进行排序
MATCH (n) RETURN n.name ORDER BY n.name,n.id - 节点降序排列
MATCH (n) RETURN n.name ORDER BY n.name DESC
5.导入csv文件(load csv)
比admin慢,比py2neo快。
- LOAD CSV FROM “file:///entities/teacher.csv” AS row 后续用row[0]、row[1]来读取相应信息,若文件有头行,则用row.id和row.name来读取对应的属性值。此处是绝对路径,文件要放在import目录下。
- 若csv文件很大,则用USING PERIODIC COMMIT LOAD CSV FROM “file:///entities/teacher.csv” AS row
6.索引
- 创建索引
create index on:Student(name) - 删除索引
drop index on:Student(name) - 创建唯一索引
create constraint on (s:Teacher) assert s.name is unique - 删除唯一索引
drop constraint on (s:Teacher) assert s.name is unique
py2neo
1.连接数据库
from py2neo import *
from py2neo.matching import *
test_graph = Graph( # 连接Neo4j,test_graph为自己命名的,后面调用都要使用这个test_graph
"http://localhost:7474",
auth=(