一、CQL语言
neo4j提供了cyber query language(CQL)实现对图形数据库中数据的查询、更新、节点关系分析等常用操作;CQL语言主要提供给了以下几类命令:
1、Create 创建节点:
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)
示例:
CREATE (LivT:Person {name:'Liv Tyler', born:1977})
说明:创捷了命名为LivT的节点,该节点发为Person类型,具有name、born属性
2、创建节点的同时和创建节点间关系
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)<-[:relation-name{<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>}]-(<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)
2、查询语句
1)、查询符合条件的的节点数据
match (<node-name>:<label-name>{query-name:query-value}) return node-name
2)、查询符合条件的节点及节点间关系
match(
<node-name>:<label-name>
{
<query-name:>:<query-value>
........
<query-name:>:<query-value>
}
)<-[:relation-name{
<query-name:>:<query-value>
........
<Propertyn-name>:<Propertyn-Value>}]
-(<node-name>:<label-name>
{
<query-name:>:<query-value>
........
<query-name:>:<query-value>
}
) return node-name,relation-name...
备注:查询关系时,关系和节点必须设置方向
3)、利用where语句进行数据查询
match(
<node-name>:<label-name>
)<-[
relation-name:relation-label]
-(<node-name>:<label-name>) where condition
return node-name,relation-name...
where 支持对节点进行条件设置,多个条件间可以通过 and、or、not等条件运算符进行连接
4)创建已有节点间关系,即:先查询节点,获得节点后创建节点间关系
match
(
<node-name1>:<label-name1>
),
(
<node-name2>:<label-name2>
) where condition
create (node-name1)<-[:relation-name1{relation-prop1:relation-value1,.....}]-(node-name2)
5)直接查询节点及其关系
match ss=(m:node-label1)<-[r:ACTED_IN{relation-prop:relation-value}]-(p:node-label2) return ss limit 2
3、数据删除
neo4j采用删除查询结果的方式删除数据,需要首先进行节点查询,然后再执行删除。示例如下:
match (p:Person{name:'Tom Hanks'}) detach delete p
该示例删除名称为Tom Hanks 的Person类型节点及其所有关联关系
4、移除属性
match (p:Person{name:'Tom Hanks'}) remove p.name
相当于移除了具有名称为Tom Hanks节点的name属性
5、更改节点的属性值
match (p:Person{name:'Tom Hanks'}) set p.name='TOM HANKS',p.born=1955
6、排序
match (p:Person{name:'Tom Hanks'}) return p order by p.name
类似sql desc 表示降序、asx 表示升序
7、并集
match (p:Person{name:'Tom Hanks'}) return p union match (pp:Person{name:'Tom Hanks'}) return pp
备注:union和自动过滤两个结合间的重复记录,而union all不过滤重复记录
8、限制结果集的返回数量
match (p:Person{name:'Tom Hanks'}) return p limit 2
当查询结果集的数量大于限制数量时,系统返回顶部的两条数据
9、merge命令
该命令 功能类似于create,但create创建节点时不进行重复节点检查,而merge检查节点是否已存在,只创建不存在的节点
10、NULL节点
create (p:Person)
上述命令将创建一个属性全为NULL的Person节点;
match (p:Person) where p.name is NULL detach delete p
该命令将删除名称属性为空的Person节点
11、常用函数
UPPER---大写转换;LOWER---小写转换;SUBSTRING---求子串; COUNT--计数;MAX--求最大;MIN--求最小
AVG---求平均;SUM---求和;STARTNODE--求取关系中的起始节点;ENDNODE---求取关系中的结束节点;ID--求取节点id值;TYPE---求取关系的类型;
12、复杂查询
已电影及其参与人员图为例,说明如下:
查找参与过电影“Cloud Atlas”演出、导演、制作的人员参与的其它电影
pp=(m:Movie) <-[]- (people:Person)-[]->(:Movie {title: "Cloud Atlas"}) return pp
查找与电影“Cloud Atlas”有0到2跳关系的人员
MATCH pp= (people:Person)-[*0..2]-(:Movie {title: "Cloud Atlas"}) return pp
查找演员Hugo Weaving参演电影的全部参演人员
MATCH pp= (people:Person{name:'Hugo Weaving'})-[:ACTED_IN]->(:Movie)-[]-(p:Person) return pp
推荐没有与tom hanks合作过的演员与Tom Hanks合作
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
(coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cocoActors)
WHERE NOT (tom)-[:ACTED_IN]->()<-[:ACTED_IN]-(cocoActors) AND tom <> cocoActors
RETURN cocoActors.name AS Recommended, count(*) AS Strength ORDER BY Strength DESC
推荐可以介绍Tom Hanks 与Tom Cruies合作的人员
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
(coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cruise:Person {name:"Tom Cruise"})
RETURN tom, m, coActors, m2, cruise,COUNT(coActors)
查找Tom Hanks 与Tom Cruise 的最短合作路径
MATCH p=shortestPath(
(bacon:Person {name:"Tom Hanks"})-[*]-(meg:Person {name:"Tom Cruise"})
)
RETURN p