因为最近项目需求使用neo4j,所以学习了cypher,记录下,以免以后遗忘了到处找
查询
MATCH (变量名:label {属性:值}) RETURN 变量名
MATCH (n:node {name :'xxx'}) RETURN n
或者
MATCH (变量名:label) WHERE 变量名.属性=值 RETURN 变量名
MATCH (n:node) WHERE n.name='xxx' RETURN n
模糊查询
match (node) WHERE n.id=~'.*xxxxx.*' RETURN n
多label查询
交集
MATCH (n:label1:label2) RETURN n
并集
MATCH (n) WHERE n:label1 OR n:label2 RETURN n
新建
CREATE (变量名:label {属性1:值,属性2:值…})
CREATE (n:node { name : 'xxx' , age : '25'})
删除
MATCH (变量名:label {属性:值}) DELETE 变量名
MATCH (n:node {name:'xxx'}) DELETE N
若是要删除该节点的所有关系则加上detach
MATCH (n:node {name:'xxx'}) DETACH DELETE n
关系
MATCH (变量名1:label {属性:值}),(变量名2:label {属性:值}) CREATE(变量名1)-[关系变量名:关系名]->(变量名2)
MATCH (n1:node {name :'xx'}),(n2:item {city:'yyy'}) CREATE (n1)-[r:has]->(n2)
查找指定节点属性
MATCH (变量名:label) return distinct keys(变量名) as 返回时变量名
MATCH (n:node) return distinct keys(n) as p
查找所有label
CALL db.labels()
更新
修改节点name属性,新增age属性
MATCH (n:node {name:'xxx'})
SET n.name='yyy'
SET n.age=10
若是这样写则会直接覆盖node节点的所有属性
MATCH (n:node {name:'xxx'})
SET n={city:'yyy'}
若是这样则会新增一个属性,并不会覆盖
MATCH (n:node {name:'xxx'})
SET n +={city:'yyy'}
添加多个标签,若只是一个,则只写一个就可以了
MATCH (n:node {name:'xxx'})
SET n:label1:label2
MERGE
MERGE可以确保图数据库中存在某个特定的模式(pattern)。如果该模式不存在,那就创建它。
如果没有node就会创建node再返回
MERGE (n:node) RETURN
通过ID查询
match(n) where id(n)=$ID return n