// 查询节点的某个属性 MATCH(node_name:node_label) WHERE node_name.p1=v1 RETURN node.p3 as p3
// 查询整个节点 MATCH(node_name:node_label) WHERE node_name.p1=v1 AND/OR node_name.p2>v2 RETURN node_name
// 例如 MATCH (e:Customer) WHERE e.name = "Abc" RETURN e
relatiONship
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// 给现有节点添加关系 MATCH (a:A),(b,B) WHERE a.p1=p1 AND b.p2=v2 OR ... CREATE (a)-[r:R{p3:v3,p4:v4,...}]->(b)
// 新建节点的同时创建关系,甚至可以在后面追加RETURN CREATE (a:A{...})-[r:R{...}]->(b:B{...}) RETURN r
// 查询关系 MATCH (a:A)-[r:R]->(b:B) WHERE a.p1=v1 OR r.p2=v2 AND b.p3=v3 RETURN r
// 例如 MATCH (cust:Customer),(cc:CreditCard) WHERE cust.id = "1001" AND cc.id= "5001" CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) RETURN r
label 一个节点有多个label
1 2 3 4 5
CREATE (a:A:B...) ...
//MATCH MATCH (a:A:B) 会返回label既是A也是B的node MATCH(a:A) 会返回A,也返回A:B,即label包含A的节点
DELETE 删除节点或关系,在删除节点前,必须先删除其相关关系
1 2 3 4 5 6 7 8 9 10 11
MATCH (a:A) WHERE a.p1=v1 DELETE a
MATCH (a:A) WHERE a.p1=v1 DELETE a.p1
MATCH (a:A) DELETE a
// 删除所有A\B之间的R关系 MATCH (a:A)-[r:R]->(b:B) DELETE r
// 同时删除关系和节点 MATCH (a:A)-[r:R]->(b:B) WHERE a.p1=v1 DELETE a,b,r
REMOVE 移除节点或关系的属性,可在后面追加RETURN
1 2 3 4
语法基本同DELETE MATCH (a:A) WHERE ... REMOVE a.p1 RETURN ...
MATCH (a:A)-[r:R]->(b:B) WHERE ... REMOVE r.p2
set 添加或修改属性
1
MATCH (a:B) WHERE ... SET a.p1=v1
order by 按一个或多个属性值排序返回结果, 默认是按升序,降序就在order列表后追加DESC
1
MATCH (a:A) WHERE ... RETURN a.p1, a.p2, a.p3 ORDERBY a.p1,a.p2
uniON 连接返回结果(名字要相同),去除重复行.注意这里的连接和关系型数据库不相同,这里只是将两个RETURN语句返回的结果列表拼接而已.
1 2 3
MATCH (a:A) RETURN a.p1 as p1, a.p2 as p2 UNION MATCH (b:B) RETURN b.p1 as p1, b.p3 as p2
MATCH (a:A) WHERE ... RETURNSUBSTRING(a.p1,0,10) AS p1
聚合countmaxsumminavg
1 2
MATCH (a:A) WHERE ... RETURNCOUNT(*) RETURNMAX(a.age), MIN(a.age), AVG(a.age), SUM(a.age)
关系函数
startnode 获取关系的开始节点
endnode 关系的结束节点
id 关系的id
type 关系的类型type
1 2
MATCH (a)-[movie:ACTION_MOVIES]->(b) RETURN STARTNODE(movie)
索引
1 2 3
CREATE index ON a:A (p1) CREATE index ON :A (p1) DROP index ON :A (p1)
unique
1
CREATEconstraintON (a:A) assert a.p1 isunique
其他
1 2 3 4 5
WHEREexists (a.name) //节点存在属性 WHERE n.name contains'giv'// 属性包含 WHERE a.name starts with'g'// 属性开头 WHERE a.name ends with'n'//属性结尾 WHERE n.name=~'.*ive.*'// 使用正则表达式
导入数据
csv格式:第一行是字段名,后面是每个字段的值
1 2 3 4
p1,p2 v1,v2 v1,v2 ...
1 2
load csv with headers from "file path" as line merge (a:A{p1:line.p1, p2:line.2})