Neo4j实战之Cypher

CREATE (n:Person { name: 'Andres', title: 'Developer' }) return n;
CREATE (n:Person { name: 'Vic', title: 'Developer' }) return n;

CREATE (n:Program { name: 'java', title: 'IT' }) return n;

CREATE (n:Program { name: 'c', title: 'IT' }) return n;

CREATE (n:Program { name: 'python', title: 'IT'  }) return n;
//创建节点
CREATE (n:Program { name: 'cpp', title: 'IT' }) return n;

CREATE (n:Person { name: 'Jly', title: 'Developer' , age : 16 }) return n;

CREATE (n:Person { name: 'Zd', title: 'Developer' , age : 18 }) return n;

//创建关系    create  unique
match(n:Person{name:"Vic"}),(m:Program{name:"c"}) create (n)-[r:hasAbility]->(m) return r;

match(n:Person{name:"Vic"}),(m:Program{name:"java"}) create (n)-[r:hasAbility]->(m) return r;

match(n:Person{name:"Vic"}),(m:Program{name:"cpp"}) create (n)-[r:hasAbility]->(m) return r;

match(n:Person{name:"Andres"}),(m:Program{name:"python"}) create (n)-[r:hasAbility]->(m) return r;

match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)-[r:Friend]->(m) return r;

match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)<-[r:Friend]-(m) return r;

match(n:Person{name:"Jly"}),(m:Person{name:"Zd"}) create (n)<-[r:Friend]-(m) return r;

match(n:Person{name:"Andres"}),(m:Person{name:"Zd"}) create (n)<-[r:Friend]-(m) return r;

//删除
match(a:Person{name:"Andres"})-[r:Friend]-(a) delete r ;

//更新
match(a:Person{name:"Andres"}) set a.hair='red' ;

match(:Person{name:"Andres"})-[:Friend]->(b) return b ;

//匿名关系  
match(:Person{name:"Andres"})-[:Friend]->(b),(b)-[:hasAbility]->(c) return c ;

//匿名节点()
match(n:Person{name:"Vic"}),(n)-[r:Friend]->() return r;

match (n:Person { name: 'Andres'})
return n;

//条件用
match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}),(n)-[r:Friend]->(m) return r;

// 逗号 隔开 代表AND   如下  定义了两个c
match(:Person{name:"Andres"})-[:Friend]->(b),(b)-[:hasAbility]->(c),(c:Program{name:"cpp"}) return c ;

//where 语句
match (a:Person{name:"Andres"})-[:Friend]->(b),(b)-[:hasAbility]->(c) where not (a)-[:hasAbility]->(c)   return c ;

match(:Person{name:"Andres"})-[:Friend]->(b),(b)-[:hasAbility]->(c),(c:Program{name:"cpp"}) return c ;

match (n:Person { title: 'Developer'})
return n;

//匹配所有节点
match(n)
return n;

//根据编号查询   测试这里的start不能省略    
start n=node(0,20)
return n;

//distinct 去重 ,貌似没看到重复
start n=node(0,20)
match (n)-[:hasAbility]->(c)
return  c;

//创建索引
CREATE INDEX ON :Person(name);

CREATE INDEX ON :Program(name);

//索引查找
MATCH (p:Person {name: 'Andres'}) 
RETURN p;

match (p:Person)
where p.title='Developer'
return p;

//可以返回俩值
match (p:Person),(n:Person)
where p.name='Zd'
return p,n;

//order by  limit  skip
match (p:Person)
where p.title='Developer'
return p
order by p.name desc
skip 1
limit 2


//支持正则表达式匹配  =~/.*@qq.com/

//has()函数   Unknown function 'has' 实测:不可用
match (p:Person)
where has(p.age)
return p;

//复杂查询性能 Cypher不如 java api 

//查询 Friend关系所有节点   支持count函数,sum avg max min 
start n=node(*)
match (n)-[:Friend]-()
return n,count(*)

//关系标识符TYPE 结果以关系类型分组
start n=node(*)
match (n)-[rel]-()
return TYPE(rel),count(*)

//Andres与Jly 为好友关系(1至3层扩线)的节点    返回的是整个路径
MATCH (p:Person {name: 'Vic'}),(n:Person {name: 'Jly'}),k=(p)-[:Friend*1..3]-(n)
RETURN k;

//ALL 每一个单个元素都匹配  实测不支持   
//cypher 1.8  使用的版本
cypher 1.8 match (p:Person)
where ALL(
        user in NODES(p) 
        where user.title='Developer'
    )
return p

//管道语句 with    保存中间数据结果
start n=node(*)
match (n)-[rel]-()
with TYPE(rel) as type,count(*) as count
where count>8
return type,count

猜你喜欢

转载自my.oschina.net/u/3847203/blog/1817400
今日推荐