**match关键字**:匹配图形模式,可以定位感兴趣数据的子图形。
**where关键字**:基于某些标准过滤数据。
**return关键字**:返回感兴趣的结果。
**distinct关键字**:用以删除重复的结果。
实例:
match (u:User)-[*]->(p:Permission)
where u.name = "User name"
return dintinct p.name
说明:这将匹配任何第一个具有用户标签且其指定的属性值为姓名(name) 的节点与第二个标记为权限节点的节点对,并且在它们之间有一个可以是任 意长度的路径。最后,返回所有匹配了的权限名称。
**start关键字**:—查找图形中的起始节点。
start user=node(1) 1
match (user)-[:HAS_SEEN]->(movie) 2
return movie 3
说明:方括号里面的冒号(:)后面指定关系的类型。2-指定了从user节点指向movie节点的HAS_SEEN关系。使用空的圆括号描述一个期望的节点,但是不在意其任何属性,以后也 不想引用它,因此不给它命名。
**not关键字**:关系过滤匹配
start john=node:users{name="John Johnson"}
match john-[-IS_FRIEND_OF]->(user)-[:HAS_SEEN]->(movie)
where NOT john-[:HAS_SEEN]->(movie)
return movie.name
说明—模式1:匹配John的朋友看过的电影。模式2:where语句的一部分,过滤第一个模式返回的电影,通过 HAS_SEEN关系有选择的连接。
**has函数**:判断有该属性的节点返回
start john=node:users("name:John Johnson")
match john-[IS_FRIEND_OF]-friend
where has(friend.twitter)
return friend
**从查询中返回整个路径**:给路径一个标识符,如recPath
start john=node:users(name="John Johnson")
match
recPath=john-[:IS_FRIEND]->(user)-[:HAS_SEEN]->(movie)
where not john-[r:HAS_SEEN]->(movie)
return movie.name,recPath
**order关键字**:在分页之前,对结果进行排序,因此分页返回的结果是一致的,无论是往前还是往后分页。
**skip关键字**:划分结果集以便跳到指定的页。
**limit关键字**:以页面尺寸限制返回结果的数量。
start john=node:users("name:John Johnson")
match john-[:HAS_SEEN]->(movie)
return movie
order by movie.name # 通过电影名字对结果
skip 20 # 跳过最前面的2页
limit 10 # 返回10个结果
**create关键字**:创建带有属性节点,创建关系。
create user1 {name:'Grace'} return user1
create john-[r:IS_FRIEND_OF]->grace return r
**create unique关键字**:创建唯一的,只创建不存在的图形实体。
**delete关键字**:删除节点和属性
start grace=node(10)
match grace-[r]-()
delete grace,r
**set关键字**:更新节点和关系属性。
start user=node(1,2)
set user.group = 'ADMINISTRATOR'
聚合:
**count函数**:计算数值
**sum函数**:数值求和
**avg函数**:计算平均值
**max函数**:寻找数值属性中的最大值
**min函数**:寻找数值属性中的最小值
start user=node(*)
match user-[:IS_FRIEND_OF]->()
return user,count(*)
order by count(*) desc
函数:
**type函数**:type(relationship)查找一个关系的类型
start n=node:user(name='John Johnson')
match n-[rel]-()
return type(rel),count(*)
**HAS(graphEntity.propertyName)**:如果一个节点或关系具有给定名 字的属性存在,则返回true。
**NODES(path)**:把一个路径转换成一个可迭代的节点集。
**ALL(x in collection where predicate(x))**:如果collection中的每一 个单个元素匹配了给定的predicate,则返回true。
**RELATIO NSHIPS(path)函数**:返回在一个给定路径上的所有节点集。
start john=node:users(name="John Johnson"),kate=node:users(name="Kate Smith") 使用索引节点
match p=john-[:IS_FRIEND_OF*1..3]-(kate) 匹配通过第1至第3级的IS_FRIEND_OF关系连接John和Kate的所有路径
where ALL(user in nedes(p) where HAS(user.facebookID)) 检查一个选择的既有facebookID账号属性集合路径上的所有节点
return p; 返回匹配的路径
参考:
https://neo4j.com/docs/cypher-manual/current/
http://neo4j.org/resources/cypher
http://docs.neo4j.org/chunked/stable/query-function.html