类似SQL语句的graph query 语言,用于neo4j 图数据库
增
- 创建标签为Person的节点,name,from,klout都属于该节点的属性
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
- 创建节点,标签为Movie,大括号内为属性
CREATE (:Movie {title: 'The Matrix'})
- 创建关联,所有满足条件的节点都会进行关联
MATCH (m:Movie),(u:User)
WHERE u.id= 3892080402 AND m.title = "The Matrix1"
CREATE (u)-[r:HAS_MOVIE]->(m)
- 创建带属性的关联
MATCH (m:File),(u:Domain)
WHERE m.File="8931...0089" AND u.Domain="register.xxx.com"
CREATE (m)-[r:COMMUNICATE{Relation:"Communicate",AntiRelation:"Communicate"}]->(u)
删
- 删除所有节点并返回节点数量
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 50000
DELETE n,r
RETURN count(n) as deletedNodesCount
- 删除节点
MATCH (project:Project {project_id: 5})
DELETE project
- 删除节点及其所属的关系
MATCH (project:Project {project_id: 5})
OPTIONAL MATCH (project)-[r]-()
DELETE project, r
MATCH (n { name: 'Andy' })
DETACH DELETE n
- 只删除节点对应的关系
MATCH (n { name: 'Andy' })-[r:KNOWS]->()
DELETE r
- 清空与本节点有关联的节点
MATCH (User{ id: 3892080402}) --> (v:Movie)
DETACH DELETE v
改
- 单条修改
MATCH (m: Person{id: 1}) SET m.name = "newName" RETURN m
- 多条修改
MATCH (m: Person{id: 1})
SET m += { content: "value", lastModified: "lastModifiedTime" }
RETURN m
查
- 全部查询(需要标明查询的最大值是多少)
MATCH (n) RETURN n LIMIT 25
- 按标签(Greeting)查询
MATCH (n:Greeting) RETURN n LIMIT 25
- 查询指定人物
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
- 查询指定id
MATCH (project:Project {project_id: 1}) RETURN project
- 查询指定数据的所有属性
MATCH (project:Project {project_id: 1})
return properties(project) AS properties
- 查询指定数据的id:
# node
MATCH (n)
WHERE id(n)= 0
RETURN n
# relationship
MATCH ()-[r]->()
WHERE id(r)= 0
RETURN r
- 查询人物关联
MATCH (project:Project {project_id: 3})
OPTIONAL MATCH (project)-[r]-(n)
RETURN n
# :CONTAINS 为关系
MATCH (project:Project {project_id: 3})
OPTIONAL MATCH (project)-[:CONTAINS]-(n)
RETURN n
- 查询是否存在指定关系:HAS_MOVIE
MATCH (u:User {id:3892080402})
OPTIONAL MATCH (u)-[r:HAS_MOVIE]->(m)
RETURN r IS NOT NULL AS result
- 查询孤儿节点
match (n) where not (n)–[]-() return n;
- 查询节点中的列表元素中是否包含某一字符串
MATCH (n) where 'BOT' in n.Names RETURN n
- 模糊查询某一节点元素,例:返回 name 中包含 car 的节点&关联
MATCH (n)
WHERE n.name =~ '.*car.*'
RETURN n
Constraint
- 将Movie中的title属性设置为primary key
- 无法用CREATE添加title相同的节点
- Constraint变量无法被SET指令修改
- UniqueMovieTitleConstraint 作为该constraint的唯一标识符,不可以和其他constraint重合。
CREATE CONSTRAINT UniqueMovieTitleConstraint ON (m:Movie) ASSERT m.title IS UNIQUE
- 获取当前database的constraint
CALL db.constraints()
- 删除constraint
DROP CONSTRAINT UniqueMovieTitleConstraint
- 节点中存在多个constrain的情况:node key
- node key作为constraint,在创建节点时必须被赋值
- node key在全部重合时会被认为是重复的节点
CREATE CONSTRAINT UniqueNameBornConstraint
ON (p:Person) ASSERT (p.name, p.born) IS NODE KEY