Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。
1、什么是Cypher
Cypher是一种声明式图查询语言,表达高效查询和更新图数据库。Cypher是相对简单的查询语法,它让我们更关注业务领域问题。
2、写
Create:
创建单个节点(注意有个空格):create (节点名)
创建带标签的节点(ID:n,label:Person):
create (别名:标签名{属性名:属性})
create (n:Person{name:”张三”})
创建带两个标签的节点:create (别名:标签1:标签2{属性名:属性})
create (n:Person:student{name:"李四"})
创建带标签、属性的节点:
create (n:Person{name:"王五",age:17})
创建关系(两个节点之间的关系):
match (a:Person),(b:Person) where a.name="张三" and b.name="李四"
create (a)-[r:RELTYPE]->(b) return r
创建关系的同时设置属性:
match (a:Person),(b:Person) where a.name="zhangs" and b.name="lisi"
create (a)-[r:RELTYPE {name:a.name +"<->" + b.name}]->(b) return r
完整创建:三个节点两个关系
create p=(an {name:"an"})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(mach {name:"mach"}) return p;
Merge(语法类似于create):
与create的区别:对不存在的节点创建,存在的节点返回。
merge (robert:Critic) return robert,labels(robert);
单个属性节点:
merge (charlie {name:"Charlie",age:10}) return charlie;
带标签和属性的单个节点:
merge (michel:Person {name:"michelDoug"}) return michel;
如果要创建节点就设置属性:merge on create
merge (keanu:Person {name:"Keanu"}) on create set keanu.created=timestamp() return keanu;
如果找到节点就设置属性:merge on match
merge (person:Person